Javascript与继承
假设我有一门课: 我希望其他对象从中继承变量和函数Javascript与继承,javascript,Javascript,假设我有一门课: 我希望其他对象从中继承变量和函数 function Bar(){} function Baz(){} 然后实例化我的对象: var bar = new Bar(); bar.foo1 // returns null bar.foo2() // returns false 在Bar和Baz中包含Foo的正确功能是什么 我已经做了Bar.prototype=newfoo()但在我们喜爱的IE上似乎失败了(如果您将所有属性附加到原型上(至少对于方法来说,这是更好的) 然后将
function Bar(){}
function Baz(){}
然后实例化我的对象:
var bar = new Bar();
bar.foo1 // returns null
bar.foo2() // returns false
在Bar
和Baz
中包含Foo
的正确功能是什么
我已经做了
Bar.prototype=newfoo()代码>但在我们喜爱的IE上似乎失败了(如果您将所有属性附加到原型上(至少对于方法来说,这是更好的)
然后将父对象的原型分配给子对象的原型就足够了:
function inherit(Child, Parent) {
var Tmp = function(){};
Tmp.prototype = Parent.prototype;
Child.prototype = new Tmp();
Child.prototype.constructor = Child;
}
inherit(Bar, Foo);
在这里,我们使用了一个中间构造函数来“解耦”两个原型。否则,如果你改变一个,你也会改变另一个(因为它们引用相同的对象)。这种方法实际上非常流行,并且被几个库使用
如果没有,则必须在子构造函数中调用父构造函数:
function Bar() {
Foo.call(this);
}
这是您应该经常做的事情,将构造函数中设置的属性分配给当前对象
另外一句话:
Bar.prototype = new Foo();
这应该是可行的(实际上在IE中也是如此),但它有两个主要缺陷:
- 在
Foo
中设置的所有实例属性将成为所有Bar
实例共享的属性
- 如果
Foo
需要一些只有在创建Bar
实例时才可用的参数,该怎么办
如果您喜欢Ruby并希望获得更完整的解决方案,请查看或。这些库可以帮助您在javascript中面向对象,并向开发人员隐藏原型
希望这有帮助这绝对不是一个独特的问题。
function Bar() {
Foo.call(this);
}
Bar.prototype = new Foo();