1.传统形式-->原型链
- 过多的继承了多用的属性
2.借用构造函数
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
function Student(name,age,sex,grade){
Person.call(this,name,age,sex);
this.grade=grade;
}
var student=new Student();
- 不能继承借用构造函数原型
- 每次构造函数都要多走一个函数
3.共享原型
Father.prototype.lastName="du";
function Father(){
}
function Son(){
}
function inherit(Target,Origin){
Target.prototype=Origin.prototype;//Son和Father的原型会指向同一个,会相互影响
}
inherit(Son,Father);
var son=new Son;//顺序不能变动
- 不能随便改动自己的模型,原型指向一样,会互相影响。
4.圣杯模式
function inherit(Target,Origin){
function F(){};//利用F作为一个中间层Son既可以改变自己的原型,又不会影响Father的原型
F.prototype=Origin.prototype;
Target.prototype=new F();
Target.prototype.constructor=Target;//将Target的构造函数指向自己,否则会指向Origin
Target.prototype.uber=Origin.prototype;//uber类似于一个super,快速的帮你找到直接的原型
}
Father.prototype.lastName="du";
function Father(){
}
function Son(){
}
inherit(Son,Father);
var son=new Son();
var father=new Father();
//类似功能另外一种写法
var inherit=(function(){
var F=function(){};//变成了私有化变量
return function(Target,Origin){
F.prototype=Origin.prototype;
Target.prototype=new F();
Target.prototype.constructor=Target;
Target.prototype.uber=Origin.prototype;
}
}());//形成了一个闭包