JavaScript 继承发展史
1.传统形式 --> (原型链)
缺点:过多继承了没用的属性 。
2.借用构造函数
缺点:不能继承借用构造函数的原型,每次构造函数都要多走一个函数。
借用person构造函数,但new的是student
对象,不能继承person
函数的原型。
3.共享原型
不能修改原型属性
如果想要在
son
的原型上添加属性,但又不影响father
的属性,则这个就不能实现。
4.圣杯模式
1 function inherit(Target , Origin){ 2 function F(){}; 3 F.prototype = Origin.prototype; //F的原型指向origin.prototype 4 Target.prototype = new F(); //Target.prototype指向新建的F对象 5 Target.prototype.constructor = Target; //构造器指向错误,需重新指向 6 Target.prototype.uber = Origin.prototype; //说明继承关系 7 } 8 Father.prototype.lastName = "curry"; 9 function Father(){ 10 // 11 } 12 function Son(){ 13 // 14 } 15 var son = new Son(); 16 var father = new Father(); 17 inherit(son,Father);
雅虎工程师给出的:
var inherit=(function(){ var F = function (){}; //形成闭包 运行完F消失 return function (Target , Origin){ F.prototype = Origin.prototype; Target.prototype = new F(); Target.prototype.constructor = Target; Target.protptype.uber = Origin.prototype; }; }());
12:48:37 2017-10-13