Наследование 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
метод.