Object.defineProperty ist das, was Sie wollen.
Beispiel:
var obj = {};
Object.defineProperty(obj, 'key', {
enumerable: false,
configurable: false,
writable: false,
value: 'static'
});
Wil definieren "obj.key" mit dem Wert: "statisch" und es wird nur lesbar sein.
Enumerierbar bedeutet, dass es beim Aufzählen der Eigenschaften eines Objekts angezeigt wird (oder nicht).
Beschreibbar bedeutet, wenn Sie es nur lesen möchten, würden Sie falsch sagen. nicht beschreibbar
Konfigurierbar zu false, wenn Sie nicht möchten, dass es vom Objekt löschbar ist.
Im Wesentlichen, indem Sie alle auf false setzen, erstellen Sie Konstanten auf dem Objekt. BTW, ihre Voreinstellungen sollen falsch sein.
So dies effektiv zu tun:
Object.defineProperty(obj, 'property', { value: 'value'});
auf dem ein konstanten schaffen 'obj' genannt 'Eigentum' mit dem Wert 'Wert'. Oder Sie könnten dies tun
function setConstant(obj, key, value)
{
Object.defineProperty(obj, key, {value: value });
}
var obj = {};
setConstant(obj, "constantName", "constantValue");
Würde es sehr lesbar machen.
ja die einzige Cross-Browser-kompatible Möglichkeit, eine Art von Konstanten zu definieren, ist die Verwendung von Closures und Methoden für den Zugriff auf diese Variable (als ob es eine private Variable ... hatte). Aber mein Problem bestand darin, dem Entwicklerbenutzer den Wert einer Konstante als obj.MY_CONSTANT zu geben, damit Ihre letzte Lösung nicht passt. Also, am Ende, für diese (IE auch die 8 Vers.) Schrecklichen und inkompatiblen Browser müssen wir Entwickler immer schlechte Lösung finden und unsere Zeiten verschwenden. Wenn M $ verstehen wird, dass Webentwickler STANDARDS wünscht ????? – xdevel2000
Ich werde normalerweise nicht widersprechen, wenn jemand sich über M $ und Standards beschweren will, aber in diesem Fall scheint es unfair, weil JavaScript-Konstanten nicht Teil irgendeiner Spezifikation sind, sie sind Mozilla-spezifisch. – Prestaul
Ja, aber ich bezog mich auf den 'Standard de facto' und const, __defineGetter__ und so weiter werden z.B. per WebKit-Engines (Chrome etc.). Auch das XMLHttpRequest-Objekt ist kein w3C-Standard (es wurde von M $ erfunden), aber es wurde von allen übernommen. – xdevel2000