Наследование JavaScript с использованием setPrototypeOf

Я читал здесь, мы можем использовать 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 ответ

Иногда ваш код может полагаться на constructor свойство, которое позволяет вам получить доступ к конструктору, не зная явно его имя функции. Но кроме того, нет необходимости устанавливать его.

Например, instanceof Оператор не зависит от этого.

Если вам не нужно беспокоиться об этом в предложенном вами решении, то вам также не понадобится это в Object.create решение.

Причина предпочитать Object.create метод заключается в том, что Object.setPrototypeOf может повлиять на эффективность вашего кода, как указано в документации mdn. Это не происходит с Object.create метод.

Другие вопросы по тегам