Nein, es ist nicht illegal (die Spezifikation hindert Sie nicht daran). Es wird normalerweise an Funktionen vorgenommen, die Sie selbst definieren.
Sie wird in den Funktionen ignoriert, die in der JavaScript-Spezifikation definiert sind, da ihre -Eigenschaft schreibgeschützt ist. Von the specification for Date.prototype
:
The initial value of Date.prototype is the intrinsic object %DatePrototype% (20.3.4).
This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
(. Mein Schwerpunkt)
es Zuordnung ist nur leise in losen Modus ignoriert; im Strict-Modus (die wir alle im Grunde die ganze Zeit verwenden sollen), ist es ein Fehler:
"use strict";
Date.prototype = {};
ein wenig über die Frage gehen, können Sie Ihr eigenen definieren nur-Lese-Eigenschaften, die die gleiche Art und Weise verhalten, wenn man so will, über Object.defineProperty
:
var obj = {};
Object.defineProperty(obj, "answer", {
value: 42,
writable: false // This is for emphasis, it's actually the default
});
tryLoose();
tryStrict();
function tryLoose() {
console.log("Trying to assign new value in loose mode.");
obj.answer = "It's complicated.";
console.log("After assignment, obj.answer = " + obj.answer);
}
function tryStrict() {
"use strict";
console.log("Trying to assign new value in strict mode.");
obj.answer = "It's complicated.";
console.log("We won't get here.");
}
Es ist nichts illegal, obwohl Sie es vermeiden sollten. Durch das Modifizieren von integrierten Objektprototypen können Sie herausfinden, wie viele Polyfills funktionieren. –
Sie können "Date.prototype" nicht neu zuweisen: http://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype, obwohl Sie das Objekt, auf das es verweist, ändern können. – 1983