使用setPrototypeOf进行javascript继承

时间:2018-11-10 18:21:37

标签: javascript prototype prototypal-inheritance

我读了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道具,我发现它更安全,更简单。

1 个答案:

答案 0 :(得分:1)

有时您的代码可能依赖于constructor属性,该属性使您可以在不显式知道其函数名称的情况下访问构造函数。但是除此之外,还有no real need进行设置。

例如,instanceof运算符不依赖它。

如果您不需要在自己建议的解决方案中为之烦恼,那么在Object.create解决方案中也将不需要它。

首选Object.create方法的原因是Object.setPrototypeOf可能会影响代码的效率,正如mdn documentation中所警告的那样。使用Object.create方法不会发生这种情况。