2017-01-30 2 views
3

Gibt es einen Fehler beim Aufruf von Object.freeze an einem Konstruktor-Prototyp in JavaScript?Irgendetwas stimmt nicht mit Object.freeze() auf einem JavaScript-Prototyp?

Ich dachte nur, dass, da der Prototyp unter alle Instanzen geteilt wird, ich vielleicht sicherstellen kann, dass niemand etwas im Prototyp durch Einfrieren überschreibt, da das Überschreiben von etwas auf dem Prototyp jede Instanz betrifft. So zum Beispiel, so etwas wie die folgenden:

function MyConstructor() { 
    // Stuff 
} 

MyConstructor.prototype = { 
    method1() { 
    // more stuff 
    }, 
    method2() { 
    // even more stuff 
    }, 
    someArray: ['some', 'values'], 
    someValue: 'value' 
} 

Object.freeze(MyConstructor.prototype); 

Antwort

1

Wenn Sie den Prototyp frieren Sie auch die Objekte einfrieren erstrecken, so dass sie in dem Prototyp nicht diese Eigenschaften definiert außer Kraft gesetzt werden können,

Diese gist ist ein Test das Problem

+0

Ja, Sie können diesen Eigenschaften nicht einfach zuweisen. Aber nein, die erbenden Objekte sind nicht eingefroren, und Sie können immer noch Schatteneigenschaften erstellen, indem Sie 'Object.defineProperty' verwenden. – Bergi

+0

Wahr, aber der Punkt ist, dass das Einfrieren eines Prototyps, wenn Instanzen anderswo verwendet werden, alle Arten von Problemen verursachen kann. Es sei denn, Sie planen es vorher natürlich vorher. – alebianco

1

ich denke, präsentieren wollen

MyConstructor.prototype.someArray = Object.freeze(['some', 'values']); 

Es gibt kaum ein Punkt für das Einfrieren der pr, was Sie tatsächlich ist Ototype-Objekt selbst, überschreibt nichts zufällig Prototypeigenschaften. Es könnte nützlich sein, vererbte Werteunveränderlich jedoch als zufällige Mutation geschieht viel einfacher und verursacht die gleichen schädlichen Auswirkungen.

Verwandte Themen