наследование JavaScript с использованием setPrototypeOf - PullRequest
0 голосов
/ 10 ноября 2018

Я читаю здесь мы можем использовать 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 голосов
/ 10 ноября 2018

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

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

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

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

...