14 Stimmen

Auf die Änderung des Wertes eines Javascript-Objekts warten

Ist es möglich (mit jQuery oder anderweitig), um für eine Änderung in den Wert eines nicht-DOM Javascript-Objekt (oder Variable) zu hören? Also, zum Beispiel, ich habe:

function MyObject()
{
    this.myVar = 0;
}

var myObject = new MyObject();
myObject.myVar = 100;

Gibt es eine Möglichkeit, darauf zu achten, wann der Wert von myVar ändern und eine Funktion aufrufen? Ich weiß, dass ich getter/setters verwenden könnte, aber sie werden in früheren Versionen von IE nicht unterstützt.

12voto

Andris Punkte 26949

Grundsätzlich haben Sie zwei Möglichkeiten

  • Nicht-Standard verwenden watch Methode, die nur in Firefox verfügbar ist
  • Getter und Setter verwenden, die in älteren IE-Versionen nicht unterstützt werden

Die dritte und plattformübergreifende Option ist die Verwendung von Polling, was nicht so toll ist

Beispiel für watch

var myObject = new MyObject();

// Works only in Firefox
// Define *watch* for the property
myObject.watch("myVar", function(id, oldval, newval){
    alert("New value: "+newval);
});

myObject.myVar = 100; // should call the alert from *watch*

Beispiel für getters y setters

function MyObject(){
    // use cache variable for the actual value
    this._myVar = undefined;
}

// define setter and getter methods for the property name
Object.defineProperty(MyObject.prototype, "myVar",{
    set: function(val){
        // save the value to the cache variable
        this._myVar = val;
        // run_listener_function_here()
        alert("New value: " + val);
    },
    get: function(){
        // return value from the cache variable
        return this._myVar;
    }
});

var m = new MyObject();
m.myVar = 123; // should call the alert from *setter*

4voto

mplungjan Punkte 153338

Wenn IE wichtig ist, sind Sie wohl nicht interessiert an Siehe

Aber jemand scheint eine Unterlegscheibe geschrieben zu haben, die diese Frage zu einem Duplikat macht

Änderungen der Objekteigenschaften in JavaScript beobachten

3voto

Alexander Beletsky Punkte 18807

Sie können ein solches Verhalten grundsätzlich implementieren

function MyObject(onMyVarChangedCallback)
{
    this.myVar = 0;

    this.setMyVar = function (val) {
       this.MyVar = val;

       if (onMyVarChangedCallback) {
           onMyVarChangedCallback();
       }
    }
}

function onChangeListener() {
   alert('changed');
}

var o = new MyObject(onChangeListener);

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