说我有一个Class:
function Foo() {
this.foo1 = null;
this.foo2 = function() { return false;};
}
我希望其他对象继承它的变量和函数。
function Bar(){}
function Baz(){}
然后实例化我的对象:
var bar = new Bar();
bar.foo1 // returns null
bar.foo2() // returns false
什么是正确的功能include Foo
in Bar
and Baz
?
我已经做了Bar.prototype = new Foo();
但它似乎在我们心爱的 IE (
如果将所有属性附加到原型(这是最好的,至少对于方法而言),
function Foo() {}
Foo.prototype.foo1 = null;
Foo.prototype.foo2 = function() { return false;};
然后将父级的原型分配给子级的原型就足够了:
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();
this should工作(实际上也在 IE 中),但它有两个主要缺陷:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)