使用 setPrototypeOf 的 javascript 继承

标签 javascript prototype prototypal-inheritance

我读了here我们可以使用Object.create来实现继承

这是一个继承自 ShapeRectangle 示例

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/

相关文章:

javascript - 如何修改拉斐尔文本?

javascript - React 隐形 reCAPTCHA

Javascript - 私有(private)变量起作用?

c++ - 不寻常的 C++ 函数声明

javascript - Javascript 中的无限原型(prototype)继承

javascript - 为什么使用 Object.prototype.hasOwnProperty.call(myObj, prop) 而不是 myObj.hasOwnProperty(prop)?

javascript - 对于简单的 HTML5 + jQuery 应用程序,我应该使用什么 JavaScript UI 测试框架?

javascript - 是否可以使用 => 来定义对象?

c++ - 如何使用其参数化构造函数初始化成员

javascript - 理解 JavaScript 中的简单类模拟器