在Javascript中,我有一个包含名为“dialogHost”的成员变量的对象。它本身就是一个可以调用不同函数的对象。目前,我设置它的方式是,在大多数情况下,对象的dialogHost值是未定义的。在极少数需要定义的情况下,我将它定义为类似“window.parent”的东西。以这种方式设置它的问题是,每当我需要使用这个成员变量时,我必须检查它是否首先定义,如:
var myDelegate;
if (typeof (myObject.dialogHost) !== 'undefined') {
myDelegate = myObject.dialogHost.someFunction;
} else {
myDelegate = someFunction;
}
myDelegate(...);
我必须在几个地方进行这种检查,如果值始终存在会很好。在这种情况下,我应该只为dialogHost提供默认值“window”吗?我不确定这是不是一个好主意。基本上,我希望默认值为:我可以简单地调用:
// This would be equivalent to myDelegate(...) above...
myObject.dialogHost.someFunction(...);
无需每次都进行上述检查。有没有办法做到这一点?
答案 0 :(得分:0)
在JavaScript中,非常好的做法是使用 "尽可能地避免全局变量" 进行开发。
我应该只提供一个默认值" window"对于dialogHost in 这个案例? - 否,不要依赖全局
window
对象。使用闭包和立即函数。
var myObject = {
'dialogHost': function(){
// doing some good stuff
}
},
myDelegate;
myDelegate = (function(obj){
function someFunction(){ // local function, not accessible from outside
// doing some good stuff too
}
return (typeof obj.dialogHost === 'function')? obj.dialogHost : someFunction;
}
)(myObject);
// Now you can use myDelegate() function anywhere below
myDelegate(...);