JavaScript 面向对象----继承的实现方式

第一种,纯原型链式继承:

function SuperClass() {

this.name = 'SuperClass';

}

SuperClass.prototype.showName = function() {

return this.name;

}

function SubClass() {

this.subName = 'SubClass';

}

SubClass.prototype = new SuperClass(); 

var obj = new SubClass();

obj,showName();

这种方法简单方便,但是它实现的本质是重写原型对象,代之以一个新类型的实例。缺点是引用类型的原型属性会被所有的实例共享,所以现在实例的属性也变为了原型属性,这样对实例的属性变更也会引起原型实例的变更。

第二种构造器继承(经典继承):

function SuperClass() {

this.idList = [1,2,3];

}

function SubClass() {

SuperClass.call(this);

}

var instance1 = new SubClass();

和所有的构造器继承一样,没办法复用,因为所有的方法都写在了构造器里面。

第三种,组合式继承:

function SuperClass(name) {

this.name = name;

this.idList = [1,2,3];

}

SuperClass.prototype.sayName = function() {

return this.name;

}

 

function SubClass(name, age) {

SuperClass.call(this, name);

}

SubClass.prototype = new SuperClass();

SubClass.prototype.constructor = SubClass();

比较好,但是SuperClass会被调用两次。

underscore中继承的实现:

 

// Extend a given object with all the properties in passed-in object(s).
  _.extend = function(obj) {
    each(slice.call(arguments, 1), function(source) {
      if (source) {
        for (var prop in source) {
          obj[prop] = source[prop];
        }
      }
    });
    return obj;
  };

 

YUI实现:

 

 

function extend(Child, Parent) {

    var F = function(){};

    F.prototype = Parent.prototype;

    Child.prototype = new F();

    Child.prototype.constructor = Child;

    Child.uber = Parent.prototype;

  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值