继承发展史
1-传统形式 → 原型链
- 过多的继承了没用的属性(很好理解,不用代码演示了)
2-借用构造函数
- 不能继承借用构造函数的原型(很好理解,不用代码演示了)
- 每次构造函数都要夺走一个函数(很好理解,不用代码演示了)
3-共享原型
- 不能随便改动自己的原型
Father.prototype.lastName = 'deng';
function Father() {
}
function Son() {
}var son = new son();
son.prototype = Father.prototype; // 共享的核心代码,即谁都可以共享Father
4-圣杯模式
//圣杯模式
function innherit(Target, Origin) {function F() {};F.prototype = Origin.prototype;Target.prototype = new F();
}
Father.prototype.lastName = 'deng';
function Father() {}
function Son() {}
inherit (Son, Father);
var son = new son();
var father = new Father();\\指向紊乱了
son.__proto__ --> new F().__rpoto__ --> Father.prototype\\改正紊乱
function innherit(Target, Origin) {function F() {};F.prototype = Origin.prototype;Target.prototype = new F();Target.prototype.constructor = Target; //让继承类的指向归位Target.prototype.uber = Origin.prototype; //让这个类知道它继承的超类是谁?
}
雅虎的Y库提供的一个开源代码
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;}
}())