Por que Babel usa setPrototypeOf como herança quando já faz Object.create (superClass.prototype)?

A publicação do código a seguir noBabel REPL

class Test {

}

class Test2 extends Test {

}

você entende issoinherits função

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;
}

Pareceu-me bem até que percebi que estava fazendo as duas coisasObject.create no protótipoe a setPrototypeOf ligar. Eu não estava tão familiarizado comsetPrototypeOf então eu fui aoMDN onde diz:

Se você se preocupa com o desempenho, evite definir o [[Protótipo]] de um objeto. Em vez disso, crie um novo objeto com o [[Prototype]] desejado usando Object.create ().

O que é confuso para mim, pois eles usam os dois. Por que esse é o caso?

Em vez disso, a linha deve ser

if (superClass && !superClass.prototype)

para quando o protótipo não estiver definido, mas ele ainda tiver um__proto__?

questionAnswers(1)

yourAnswerToTheQuestion