我知道如何在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() {
...
...
};
}
现在,如果我想要一个fun3
对象继承fun1
对象,我可以这样做
fun3.prototype=new fun1();
或继承fun2
对象我可以做到这一点
fun3.prototype=new fun2();
但我如何继承fun1
和fun2
?
答案 0 :(得分:7)
从技术上讲,JavaScript不提供多重继承。每个对象都有一个明确定义的单个“原型”对象,因而是一个“原型链”。
但是,可以使用其他方法扩充任何对象,即所谓的“expandos”。因此,您可以迭代一组方法,并将它们单独添加到新创建的对象中。这样的集合被称为“mixin”。
有几个框架提供mixins,例如:
它们的工作方式基本相同。
但请注意,这不是真正的继承,因为对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!
答案 1 :(得分:3)
Javascript支持mixins(在我看来)比C ++多继承更好。人们必须改变C ++方式的思路,以了解mixin的有用性。你可以阅读它们:
答案 2 :(得分:1)
答案 3 :(得分:1)
嗯,你可以简单地从fun1继承fun2开始。
fun2.prototype = new fn1;
如果以上内容对您不起作用,那么很遗憾您无法进行多重继承。 您可以将属性复制到新对象,但它不是真正的“实时”继承。
例如:
func3.prototype = new fun1();
for(var i in func2.prototype)func3.prototype[i]=fun2.prototype[i];