浏览 1683 次
锁定老帖子 主题:Javascript 继承 (四)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-12
最后修改:2009-01-12
封装继承通过上面的学习,我们把继承封装,这样就可复用了。代码如下 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链。)
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-27
extend2方法中 如果p 和 c中有相同的属性 是不是就被覆盖了
调用toString()方法会输出什么呢 |
|
返回顶楼 | |