Почему Babel использует setPrototypeOf для наследования, когда он уже использует Object.create (superClass.prototype)?
Размещение следующего кода вBabel REPL
class Test {
}
class Test2 extends Test {
}
Вы получаете этоinherits
функция
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}
Это выглядело хорошо для меня, пока я не понял, что это делает обаObject.create
по прототипуа также a setPrototypeOf
вызов. Я не был знаком сsetPrototypeOf
поэтому я пошел вMDN где сказано:
Если вы заботитесь о производительности, вам следует избегать установки [[Prototype]] объекта. Вместо этого создайте новый объект с желаемым [[Prototype]], используя Object.create ().
Что меня смущает, так как они используют оба. Почему это так?
Если линия вместо
if (superClass && !superClass.prototype)
когда прототип не установлен, но он все еще имеет__proto__
?