javascript是否支持C++等多重继承

lov*_*esh 3 javascript multiple-inheritance

我知道如何在javascript中继承,但我只能继承一个对象.例如.

function fun1() {
this.var1=10;
this.meth1=function() {
...
...
};
}

function fun2() {
this.var2=20;
this.meth2=function() {
...
...
};
}

function fun3() {
this.var3=30;
this.meth3=function() {
...
...
};
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要一个fun3对象继承fun1对象我可以做到这一点

fun3.prototype=new fun1();
Run Code Online (Sandbox Code Playgroud)

或者继承fun2对象我可以做到这一点

fun3.prototype=new fun2();
Run Code Online (Sandbox Code Playgroud)

但我怎么能继承fun1fun2

use*_*621 7

从技术上讲,JavaScript不提供多重继承.每个对象都有一个明确定义的单个"原型"对象,因此是一个"原型链".

但是,可以使用其他方法扩充任何对象,即所谓的"expandos".因此,您可以迭代一组方法,并将它们单独添加到新创建的对象中.这样的集合被称为"mixin".

一些框架提供mixins,例如:

  • 的Qooxdoo
  • ExtJS的
  • mootools的
  • ...

它们的工作方式基本相同.

但请注意,这不是真正的继承,因为对mixin的更改不会反映在对象中.

例如:

var mixin = {
    method: function () {
        console.log('Hello world!');
    }
};
var foo = new fun1();
foo.method = mixin.method;
foo.method(); // Hello world!
mixin.method = function () { console.log('I changed!') };
foo.method(); // Hello world!
Run Code Online (Sandbox Code Playgroud)