Warum verwendet Babel setPrototypeOf für die Vererbung, wenn Object.create (superClass.prototype) bereits vorhanden ist?

Geben Sie den folgenden Code in das @ eBabel REPL

class Test {

}

class Test2 extends Test {

}

Du bekommst dasinherits function

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

Es sah gut für mich aus, bis ich merkte, dass es beides tatObject.create auf dem Prototypun a setPrototypeOf Anruf. Ich war nicht so vertraut mitsetPrototypeOf so ging ich zum MDN wo steht

Wenn Sie Wert auf Leistung legen, sollten Sie es vermeiden, den [[Prototyp]] eines Objekts festzulegen. Erstellen Sie stattdessen mit Object.create () ein neues Objekt mit dem gewünschten [[Prototype]].

Was verwirrt mich, da sie beide benutzen. Warum ist das so?

Sollte die Zeile stattdessen @ se

if (superClass && !superClass.prototype)

für den Fall, dass der Prototyp nicht gesetzt ist, aber immer noch ein @ h__proto__?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage