2016-07-21 38 views
0

我有全局變量例如window.remote.storageData填寫腳本運行。但是,在某些情況下,它會變得不明確。在這些情況下,我想要觸發功能以重新加載它。 我用的setInterval此:如果Global var變得不確定,立即觸發函數

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

但是,如果VAR成爲定時器的範圍不確定我在我的代碼有錯誤。 微小的計時器差距卡住了我的應用程序,那些定時器少於500的解決方案工作不正常。

當變量值被改變時,是否有一些方法可以立即觸發函數?

+0

或制定者/吸氣 –

+0

是的,這就是所謂的二傳手:[MDN - Defining_getters_and_setters(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters) – Thomas

回答

3

如果您使用ES5瀏覽器,並且remote未凍結,您可以使用自定義get/set來定義屬性。

(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)) 

但是有些代碼仍然可以代替整個window.remote對象。在這種情況下,您需要在window本身上定義remote屬性並使用自定義獲取/設置。

+0

謝謝,那是我尋找的 – AlexBerd