Почему 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__?

Ответы на вопрос(1)

Ваш ответ на вопрос