Warum mutiert die [[prototype]] von einem Objekt schlecht für die performance?

Aus der MDN docs für die standard setPrototypeOf - Funktion sowie die nicht-standard - __proto__ Eigenschaft:

Mutiert die [[Prototype]] von einem Gegenstand, egal wie dies erreicht wird, ist dringend abzuraten, denn es ist sehr langsam und unvermeidlich verlangsamt sich anschließende Ausführung in der modernen JavaScript-Implementierungen.

Mit Function.prototype um Eigenschaften hinzuzufügen ist die Möglichkeit zum hinzufügen von member-Funktionen, um javascript-Klassen. Dann wie im folgenden gezeigt:

function Foo(){}
function bar(){}

var foo = new Foo();

//This is bad: 
//foo.__proto__.bar = bar;

//But this is okay
Foo.prototype.bar = bar;

//Both cause this to be true: 
console.log(foo.__proto__.bar == bar); //true

Warum ist foo.__proto__.bar = bar; schlecht? Wenn Ihr bad ist nicht Foo.prototype.bar = bar; genauso schlimm?

Warum dann diese Warnung: es ist sehr langsam und unvermeidlich verlangsamt sich anschließende Ausführung in der modernen JavaScript-Implementierungen. Sicherlich Foo.prototype.bar = bar; ist nicht so schlimm.

Update Vielleicht durch mutation gemeint ist die Umwidmung. Siehe Antwort akzeptiert.

__proto__ ist ein nicht nicht-standard-Eigenschaft .. so dass aus dem Weg, es wäre schön, finden Sie die Antworten, die auf die performance-Frage direkt: Warum ist es "..sehr langsam und unvermeidlich verlangsamt sich anschließende Ausführung in der modernen JavaScript-Implementierungen"?
danke. Das war meine Absicht. Aktualisierte Frage zu sein, mehr durch explizite Nennung des neuen der standard Weg.
Ich kann mir vorstellen, dass Sie beide haben das gleiche problem. Es scheint, wie die JS-engine benötigen würde, um "flush" zwischengespeicherte Eigenschaft Auflösungen oder andere kompiliert/intermediate IL für alle angekettet (abgeleitete) Objekte.
Vielleicht. Obwohl ich nicht einverstanden mit dieser Antwort, wie es scheint, zu Rock Problemen mit expliziten mutation (kann man mutieren, ohne __proto__, wie gezeigt) und impliziert, dass es keine solchen Optimierungen auftreten (die Auswirkungen auf die Leistung wrt. Mutationen nicht existent).
Ich fand die Frage und die entsprechende Antwort, die ich suchte: Soll ich default-Werte der Attribute, die auf den Prototyp, um Platz zu sparen? zwar nicht vollständig Verwandte ich denke, das ist einer der Gründe, warum sollten Sie das nicht tun.

InformationsquelleAutor basarat | 2014-05-22

Schreibe einen Kommentar