首页 > 解决方案 > 使用 setPrototypeOf 的 javascript 继承

问题描述

我在这里读到我们可以使用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道具,我发现它更安全、更简单。

标签: javascriptprototypeprototypal-inheritance

解决方案


有时您的代码可能依赖于该constructor属性,它允许您在不明确知道其函数名称的情况下访问构造函数。但除此之外,没有真正需要设置它。

例如,instanceof运营商不依赖它。

如果您不需要在自己建议的解决方案中打扰它,那么您也不需要在Object.create解决方案中使用它。

喜欢这种Object.create方法的原因是它可能会影响代码的效率,正如mdn 文档Object.setPrototypeOf中所警告的那样。该方法不会发生这种情况。Object.create


推荐阅读