我读了here,我们可以使用Object.create
来实现继承
以下是一个Rectangle
的示例,该示例继承自Shape
function Shape() {}
function Rectangle() {
Shape.call(this);
}
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;
var rect = new Rectangle();
我想知道使用Object.setPrototypeOf
代替Object.create
是否正确?
function Shape() {}
function Rectangle() {
Shape.call(this);
}
Object.setPrototypeOf(Rectangle.prototype, Shape.prototype);
var rect = new Rectangle();
如果是正确的话,那么我想知道为什么这么多示例显示对Object.create
的继承,因为在使用此方法时您需要担心constructor
属性。
有了Object.setPrototypeOf
,您不需要重新定义consctrutor
道具,我发现它更安全,更简单。
答案 0 :(得分:1)
有时您的代码可能依赖于constructor
属性,该属性使您可以在不显式知道其函数名称的情况下访问构造函数。但是除此之外,还有no real need进行设置。
例如,instanceof
运算符不依赖它。
如果您不需要在自己建议的解决方案中为之烦恼,那么在Object.create
解决方案中也将不需要它。
首选Object.create
方法的原因是Object.setPrototypeOf
可能会影响代码的效率,正如mdn documentation中所警告的那样。使用Object.create
方法不会发生这种情况。