`
afcn0
  • 浏览: 9089 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

JavaScript原形链多继承函数

阅读更多
JavaScript由于对象使用原形继承,原形链只能有一条,所以一般不能实现多继承,就算是多继承,也是把别的构造函数内容拿过来,修改一下context在原来构造函数基础上继续执行,我写了个自认为可以实现多继承的函数
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__实现的方法
分享到:
评论
2 楼 nullspace 2012-06-24  
怎么实现交互执行javascipt语句的?在什么环境下?
1 楼 ajaxgo 2007-10-17  
虽然,有些方法可以实现多继承(dojo做到了,但我没具体看它的代码)。但是,大家都知道多继承的坏处,像c++这种传统的OO语言,都没能很好控制多继承,而像java,c#都已经舍弃了多继承,那我们为什么还要转而让js来模拟多继承呢?单继承多接口不是更加合理?且更加容易实现,也不会说不符合大多数程序员的习惯。

相关推荐

Global site tag (gtag.js) - Google Analytics