2007-10-16
JavaScript原形链多继承函数
JavaScript由于对象使用原形继承,原形链只能有一条,所以一般不能实现多继承,就算是多继承,也是把别的构造函数内容拿过来,修改一下context在原来构造函数基础上继续执行,我写了个自认为可以实现多继承的函数
使用:
其中定义了空对象a,后分别继承自test和test2构造函数,都有prototype继承,并且对于原构造函数无侵入影响
主要是利用closure封闭住__proto__原原形上级,中间使用temp中转,各位高手看看这样可行吗,我想不出来不使用__proto__实现的方法
Object.extend = function(destination, source) {
for (var property in source)
destination[property] = source[property];
return destination;
};
Object.prototype.mix=function(sub){
sub.call(this);
var temp=Object.extend({},sub.prototype);
temp.__proto__=this.__proto__;
this.__proto__=temp
}
使用:
>>> function test(){this.a=123}
>>> test.prototype.b=345
345
>>> a={}
Object
>>> a.mix(test)
>>> a
Object a=123 b=345
>>> function test2(){this.c=678}
>>> test2.prototype.test3=789
789
>>> a.mix(test2)
>>> a
Object a=123 c=678 test3=789 b=345
其中定义了空对象a,后分别继承自test和test2构造函数,都有prototype继承,并且对于原构造函数无侵入影响
>>> test2.prototype Object test3=789 >>> test.prototype Object b=345
主要是利用closure封闭住__proto__原原形上级,中间使用temp中转,各位高手看看这样可行吗,我想不出来不使用__proto__实现的方法
- 18:00
- 浏览 (1161)
- 评论 (1)
- 进入论坛
- 发布在 javascript研究小组 圈子
- 相关推荐
评论
ajaxgo
2007-10-17
虽然,有些方法可以实现多继承(dojo做到了,但我没具体看它的代码)。但是,大家都知道多继承的坏处,像c++这种传统的OO语言,都没能很好控制多继承,而像java,c#都已经舍弃了多继承,那我们为什么还要转而让js来模拟多继承呢?单继承多接口不是更加合理?且更加容易实现,也不会说不符合大多数程序员的习惯。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 3537 次
- 性别:

- 来自: 天津

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Prototype修改版本,比jQ ...
我想知道上面的 Java 代码怎么加上去的,嘿嘿,是不是太菜了??
-- by sunfengcheng -
如何跨越原形链调方法
把函数作为第一公民放在前头调用了
-- by sp42 -
如何跨越原形链调方法
这种形式在ext的源码中经常的使用,比如ext在往arguments追加参数的时 ...
-- by campaign -
如何跨越原形链调方法
一个字:“妙”,哈哈
-- by sp42 -
Prototype修改版本,比jQ ...
1. 1.6 rci基本就是最后版本了,"Barring any heinous ...
-- by afcn0






评论排行榜