Javascript 继承 (四)

封装继承

通过上面的学习,我们把继承封装,这样就可复用了。代码如下

function extend(Child, Parent) {
   var F = function(){};
   F.prototype = Parent.prototype;
   Child.prototype = new F();
   Child.prototype.constructor = Child;
   Child.uber = Parent.prototype;
}

 我们可以调用这个方法实现继承。

extend(TwoDShape, Shape);
extend(Triangle, TwoDShape);

 许多开源库都实现了继承,如YUI 你可以如下用法

YAHOO.lang.extend(Triangle, Shape)

 复制属性

继承也不过是为了代码复用,我们可以利用复制属性的方法。看看如下代码

function extend2(child,parent){
   var p = parent.prototype;
   var c = child.prototype;
   for(var i in p){
      c[i] = p[i];
   }
   c.uber = p;
}

  上面的代码,循环了父对象的所有属性,并不像上个例子,没有必要重置child.prototype.constructor。因为这次是扩展了child.prototype.并不是重写。因此这个constructor的属性指向的是当前的值。

当然这个继承方法比第一种效率更低。原因就是第二种的child.prototype的属性被复制了,并不像第一种通过prototype链去查找的。

但是一定要记住,只有属性被复制了。所有的对象并没有被复制,仅仅专递的是引用而已。

虽然效率低点,但是仅仅是属性复制而已,有好处的是,当调用方法的时候,会更快的找到所需要的方法(也就是查找更少的prototype链。)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值