2016-07-21 11 views
0

Ich habe globale Variable, z. window.remote.storageData, das beim Ausführen des Skripts ausgefüllt wird. In einigen Fällen wird es jedoch explizit undefiniert. In diesen Fällen möchte ich die Funktion auslösen, um sie neu zu laden. I verwendet setInterval dafür:Funktion sofort auslösen, wenn Global var undefiniert wird

setInterval(function(){...},timer); 

Wenn jedoch die var in Reichweite des Timers nicht definiert wird habe ich Fehler in meinem Code. Tiny Timer Lücke ist meine Anwendung stecken, die die Lösung mit Timer weniger als 500 funktioniert nicht gut.

Gibt es einige Möglichkeiten, die Funktion sofort auszulösen, wenn der Variablenwert geändert wird?

+0

oder Setter/Getter –

+0

Ja, es ist ein Setter genannt: [MDN - Defining_getters_and_setters] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters) – Thomas

Antwort

3

Wenn Sie ES5-Browser verwenden und remote nicht eingefroren ist, können Sie eine Eigenschaft mit benutzerdefiniertem get/set definieren.

(function(remote) { 
    var value = remote.storageData; 

    try { 
    Object.defineProperty(remote, 'storageData', { 
     get: function() { return value;} 

     set: function(newVal) { 
     if(typeof newVal === 'undefined') { 
      newVal = //some code to get value 
     } 

     value = newVal 
     } 
    }) 
    } catch(e) { 
    console.log(e) 
    } 
}(window.remote)) 

Aber einige Code könnte immer noch gesamte window.remote Objekt ersetzen. In diesem Fall müssen Sie remote Eigenschaft mit benutzerdefinierten Get/Set auf window selbst definieren.

+0

Danke, das, wonach ich suche – AlexBerd

Verwandte Themen