【发布时间】:2016-05-13 12:12:22
【问题描述】:
考虑到像这样实现继承的标准方式
function BaseClass() {
}
function SubClass() {
BaseClass.call(this);
}
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.constructor = SubClass;
为什么要这样做
SubClass.prototype = Object.create(BaseClass.prototype);
最终得到类似的东西
function F(){}
F.prototype = BaseClass.prototype;
SubClass.prototype = new F();
而不仅仅是做
Subclass.prototype = BaseClass.prototype;
【问题讨论】:
-
如果你只是做
Subclass.prototype = BaseClass.prototype那么Sub 和Base 将有相同的原型——也就是说,它们的原型属性将引用相同的对象。您提到的其他技术使 Sub 的原型成为一个单独的对象,这是人们通常想要的。 -
如果你熟悉其他语言的OO。我强烈建议您将函数命名为
BaseConstructor()和SubConstructor(),因为它们就是这样。原型是实际的“类”,函数是构造函数。这使得考虑 javascript 变得更容易。在其他语言中,构造函数属于一个类,而在 js 中,类(原型)属于构造函数。
标签: javascript oop inheritance prototype