Javascript 如果全局变量未定义,则立即触发函数
我有全局变量,例如在脚本运行时填充的Javascript 如果全局变量未定义,则立即触发函数,javascript,jquery,Javascript,Jquery,我有全局变量,例如在脚本运行时填充的window.remote.storageData。但是,在某些情况下,它会变得不明确。在这种情况下,我想触发函数以重新加载它。 我为此使用了setInterval: setInterval(function(){...},timer); 然而,如果变量在计时器范围内变得未定义,我的代码就会出错。 我的应用程序中存在微小的计时器间隙,那些计时器小于500的解决方案无法正常工作 是否有一些方法可以在变量值更改时立即触发函数?如果您使用ES5浏览器并且remot
window.remote.storageData
。但是,在某些情况下,它会变得不明确。在这种情况下,我想触发函数以重新加载它。
我为此使用了setInterval:
setInterval(function(){...},timer);
然而,如果变量在计时器范围内变得未定义,我的代码就会出错。
我的应用程序中存在微小的计时器间隙,那些计时器小于500的解决方案无法正常工作
是否有一些方法可以在变量值更改时立即触发函数?如果您使用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))
但是一些代码仍然可以替换整个
窗口.remote
对象。在这种情况下,您需要在窗口
本身上使用自定义获取/设置来定义远程
属性。如果您使用ES5浏览器并且远程
未冻结,则可以使用自定义获取/设置来定义属性
(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))
但是一些代码仍然可以替换整个
窗口.remote
对象。在这种情况下,您需要定义remote
属性,并在窗口上自定义get/set
本身。或setters/getters是的,它被称为setter:或setters/getters是的,它被称为setter:谢谢,这就是我要找的hanks,这就是我要找的