2017-07-22 2 views
6

In Javascript ist es möglich, Eigenschaften oder Methoden von Object.prototype zu überschreiben. Zum Beispiel:Wie vermeidet man die Verschmutzung von Prototypen in Javascript?

Object.prototype.toString = function(){ 
    return "some string"; 
}; 

Es kann eine ganze Anwendung brechen, wenn nicht sorgfältig verwendet wird. Gibt es irgendwelche Tools, Techniken oder Ansätze, um dies zu vermeiden (zum Beispiel eine Art "strikter Modus", der es dem Entwickler nicht erlaubt, die Eigenschaften von Object zu überschreiben)?

+4

Tun Sie es einfach nicht und nehmen Sie keine Bibliotheken, die das tun? – Paul

+3

'Object.freeze (Object.prototype)' wird helfen, aber wieder .. weiß nicht, wie viel Verschmutzung es schaffen wird –

+2

Ein gutes Buch für jeden, der auf diese Frage landet: https://esdiscuss.org/topic/ object-freeze-object-prototyp-vs-reality –

Antwort

5

Object.freeze(YourConstructor.prototype) kann helfen, Ihr Konstruktor verbundenen Prototyp-Objekt vor mucked mit zu schützen. Von MDN:

Die Object.freeze() Verfahren friert ein Objekt: das heißt, neue Objekte hinzugefügt, um es verhindert; verhindert, dass vorhandene Eigenschaften entfernt werden; und verhindert, dass vorhandene Eigenschaften oder deren Aufzählbarkeit, Konfigurierbarkeit oder Schreibbarkeit geändert werden, und verhindert außerdem, dass der Prototyp geändert wird.

Es funktioniert auf das Objekt selbst, anstatt eine Kopie, die eingefroren ist. Es gibt denselben Verweis zurück, an dem Sie es übergeben.

Es ist am besten, integrierte Prototypen allein zu lassen, so dass es unter Object.prototype verwendet werden kann, und das ist vielleicht keine gute Idee. :-) Sicherlich müssten Sie eine Los des Testens tun, wenn Sie ... Siehe this thread auf der es-discuss Mailingliste für relevante, nützliche Informationen.

+0

hmm, aber eine einfache Sache, die ich hinzufügen möchte (oder fragen kann), was ist der Punkt, dies zu tun, wenn ein Angriff das "Objekt" selbst ablehnt? –

+2

@KoushikChatterjee Diese Techniken können nur dazu beitragen, dass Dritte * Ihre Bewerbung * nicht versehentlich brechen. Sie können es niemals gegen einen Angreifer sichern. Wenn Sie auf Ihrer Seite uneingeschränkten Code ausführen, haben Sie bereits verloren. – Bergi

+0

+1, weil Sie Ihre Türen abschließen können, aber Sie können keine Bärenfallen in Ihr eigenes Haus stellen, so funktioniert Sicherheit nicht. – Remi

Verwandte Themen