Sie können einige grundlegende Schutz bieten wie diese mit Object.defineProperty:
var o = { a: 5 };
o._protected = {};
o._protected.a = o.a;
Object.defineProperty(o, 'a', {
get: function() { return this._protected.a; },
set: function(value) {
if (value > 0 && value < 5) {
this._protected.a = value;
}
configurable: false
});
Diese Änderungen Eigenschaft a
in diesem Objekt beschränken wird, so dass sie durch die get gehen (lesen)/setzen (aktualisieren). Natürlich kann in diesem Fall das _protected
Objekt manipuliert werden, aber es erfordert, dass der Benutzer es bewusst "hackt". Versuche, Eigenschaft a
direkt zu ändern, würden unter Ihrer Kontrolle sein.
In diesem Beispiel würde ein Versuch, o.a = 6 zu setzen, keine Änderung von o.a zur Folge haben (natürlich könnten Sie ihn auf den maximal erlaubten Wert in Ihrer set-Funktion setzen, wenn dies vorzuziehen wäre).
Sie können Änderungen an o.a verhindern, indem Sie keine Set-Funktion bereitstellen.
Dies kann nützlich sein, um sicherzustellen, dass Eigenschaften nur 'gültige' Werte erhalten und ich habe es oft so verwendet.
In JS können Sie nichts in Runtime schützen. Alles kann Affenflicken sein. – zerkms
@zerkms Ich habe eine Antwort hinzugefügt, bitte überprüfen Sie und sagen Sie mir, was los ist! – challenger