继承发展史
1.传统形式-> 原型链
中过多的继承了没用的属性
2.借用构造函数
不能继承借用构造函数的原型
每次构造函数都要多走一个函数
3.共享原型
各不能随便改动自己的原型
4.圣杯模式
1. 传统形式-> 原型链
//想继承的也继承了不想继承的也继承了。效率比较低
Grand.prototype.lastName = "ji";
function Grand(){
}
var grand = new Grand();
Father.prototype = grand;
function Father(){
this.name = "hehe";
}
var father = new Father();
Son.prototype = father;
function Son(){
}
var son = new Son();
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 = "Deng";
function Father(){
}
function Son(){
}
// Son.prototype = Father.prototype;
// var son = new Son();
// var father = new Father();
function inherit(Target,Origin){
Target.prototype = Origin.prototype;
}
inherit(Son,Father);
var son = new Son();
4. 圣杯模式
Father.prototype.lastName = "Deng";
function Father(){
}
//Son.prototype.sex="male";
function Son(){
}
// Son.prototype = Father.prototype;
// var son = new Son();
// var father = new Father();
function inherit(Target,Origin){
function F(){};
F.prototype = Origin.prototype
Target.prototype = new F();
Target.prototype.constuctor = Target;
Target.prototype.uber = Origin.prototype;//真正继承的是谁
}
//私有化变量
// var inherit = (function (){
// var F = function (){};
// return function(Target,Origin){
// F.prototype = Origin.prototype
// Target.prototype = new F();
// Target.prototype.constuctor = Target;
// Target.prototype.uber = Origin.prototype;
// }
// }());
inherit(Son,Father);
var son = new Son();
var father = new Father();