论坛首页 Web前端技术论坛

JavaScript原形链多继承函数

浏览 3668 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-16  
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__实现的方法
   发表时间:2007-10-17  
虽然,有些方法可以实现多继承(dojo做到了,但我没具体看它的代码)。但是,大家都知道多继承的坏处,像c++这种传统的OO语言,都没能很好控制多继承,而像java,c#都已经舍弃了多继承,那我们为什么还要转而让js来模拟多继承呢?单继承多接口不是更加合理?且更加容易实现,也不会说不符合大多数程序员的习惯。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics