我有全局变量,例如在脚本运行时填充的window.remote.storageData
。但是,在某些情况下,它明确地变得未定义。在那些情况下,我想触发功能以重新加载它。
我为此使用了setInterval:
setInterval(function(){...},timer);
但是,如果var在定时器范围内未定义,我的代码中出现错误。 微小的计时器差距困在我的应用程序中,那些计时器少于500的解决方案效果不佳。
当变量值发生变化时,是否有一些方法可以立即触发功能?
答案 0 :(得分: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
对象。在这种情况下,您需要在remote
本身上使用自定义get / set定义window
属性。