Ich bin neugierig: weiß jemand, warum die ECMAScript5-Spezifikation die Eigenschaften des vordefinierten Objektprototyps im strikten Modus nicht verschärft hat? Zum Beispiel scheint es so, als gäbe es keine Informationen darüber, wie hasOwnProperty definiert ist. Ich habe versucht, es neu zu definieren (und den Code in FF4 beta getestet) und ich konnte damit durchkommen. Wenn ich nichts zu tun haben falsch, dann bedeutet dies, dass jeder kann noch die Eigenschaft Object.prototype.hasOwnProperty neu definieren und wirklich schrauben gesamten Code, der für die Arbeit Eigentum auf sie verlässt sich ...hasOwnProperty und ECMAScript 5 strict mode
Gedanken dazu?
EDIT: ein wenig mehr Informationen, als ich durch die Spezifikation graben ...
Wie ich unten in einem Kommentar gesetzt haben, können Sie nicht wirklich Object.prototype im strikten Modus ändern aufgrund der Metadaten, wurde darauf angewendet (Writable, Enumerable und Configurable sind alle auf false gesetzt) und FF 4 Beta (die ich verwende, um meine Tests auszuführen) erzeugt die Ausnahme.
danke.
Die Frage ist: Sind integrierte Objekte standardmäßig versiegelt? Ich habe noch nicht in ES5 gegraben, daher kenne ich die Antwort auf diese Frage nicht. –
@ Šime Vidas Nein, integrierte Objekte sind standardmäßig nicht versiegelt. Ihre [[Extensible]] wird auf 'true' gesetzt, so dass Sie ihnen einfach Eigenschaften hinzufügen können (siehe Abschnitt 15). AIUI, das Ziel war es, das ES-Objektmodell flexibel zu halten und nur absolut wichtige Teile zu sperren (zB globale, nicht definierte, NaN- und Infinity-Eigenschaften nicht beschreibbar und nicht konfigurierbar zu machen) – kangax