我读了here我们可以使用Object.create
来实现继承
这是一个继承自 Shape
的 Rectangle
示例
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
属性,我发现它更安全、更简单。
最佳答案
有时您的代码可能依赖于 constructor
属性,它允许您访问构造函数而无需明确知道其函数名称。但除此之外,还有 no real need设置它。
例如,instanceof
运算符不依赖于它。
如果您不需要在自己建议的解决方案中考虑它,那么您在 Object.create
解决方案中也不需要它。
首选 Object.create
方法的原因是 Object.setPrototypeOf
可能会影响代码的效率,正如 mdn documentation 中所警告的那样. Object.create
方法不会发生这种情况。
关于使用 setPrototypeOf 的 javascript 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242053/