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

posted @ 2017-10-13 12:46  im.lhc  阅读(132)  评论(0编辑  收藏  举报