3 Stimmen

Konstanten oder Endvariablen in Modulen Javascript

Ich versuche, einige Codes zu schreiben, die mir erlauben, Integer-Werte basierend auf dem Variablennamen abzurufen, den ich verwende. jedoch versuche ich, die Integer-Werte einen endgültigen Wert oder etwas zu machen, das nicht geändert werden kann. ich habe einige Codes unten platziert, die mir erlauben, Werte abzurufen, wie oben erklären. kann jemand mir sagen, wie issit möglich für mich, sie eine endgültige Variable oder etwas zu machen? Vielen Dank im Voraus.

(function() {

// Create the global, and also give ourselves a convenient alias for it (`mod`)
 window.MyModule = {
    RED: "#FF0000",
    BLUE: "#0000FF",
    GREEN: "#00FF00",
};

})();

alert(MyModule.RED); // #FF0000

6voto

Raynos Punkte 162170

Haftungsausschluss: In Bezug auf die Sicherheit sind konstante/endgültige Variablen albern. In Bezug auf die erhöhte Leistung, weil die js-Engine kann es mehr optimieren ich bezweifle, es macht einen Unterschied.

Benchmark zeigt keine merkliche Leistungssteigerung. Abgesehen von Pedanterie oder Pseudosicherheit ist dies nicht wirklich nützlich.

Der einzige Anwendungsfall ist das Einfrieren eines Teils der Bibliothek, damit sich die Benutzer nicht selbst ins Bein schießen.

Mit ES5 Object.freeze

window.MyModule = Object.freeze({
    RED: "#FF0000",
    BLUE: "#0000FF",
    GREEN: "#00FF00",
});

Sie können (und es ist hoch empfohlen) verwenden Sie die ES5-Shim ältere Browser zu aktualisieren, damit sie die Anforderungen erfüllen.

Sie können auch einfach Object.defineProperties

window.MyModule = {};
Object.defineProperties(window.MyModule, {
  RED: { value: "#FF0000" },
  BLUE: { value: "#0000FF" },
  GREEN: { value: "#00FF00" }
});

Es gibt eine nette Abkürzung für das oben genannte mit Object.create

window.MyModule = Object.create(null, {
  RED: { value: "#FF0000" },
  BLUE: { value: "#0000FF" },
  GREEN: { value: "#00FF00" }
});

Seien Sie vorsichtig, wenn Sie den Prototyp auf null können Sie ihn auf Object.prototype

4voto

FishBasketGordo Punkte 22458

Der beste/einzige Weg, den ich kenne, um dies zu tun, ist RED, BLUE, GREEN, etc. als Funktionen zu deklarieren und einen konstanten Wert zurückgeben, wie so:

window.MyModule = {
    RED: function() { return "#FF0000"; },
    BLUE: function() { return "#0000FF"; },
    GREEN: function() { return "#00FF00"; }
};

Jemand kann die Funktion immer noch überschreiben, um etwas anderes zu tun, aber es ist semantisch schwieriger zu tun - eine Funktion scheint eher so, dass sie nicht überschrieben werden sollte.

3voto

Alnitak Punkte 324207

Sie können eine schreibgeschützte Eigenschaft erstellen (d. h. eine, die eine getter aber keine setter ).

Wenn Sie ECMAScript5 verwenden, besuchen Sie Object.defineProperty() .

Einige frühere Versionen unterstützen object.__defineGetter__() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X