Javascript 如何创建包含函数指针的对象成员变量
在Javascript中,我有一个对象,其中包含一个名为“dialogHost”的成员变量。它本身就是一个可以调用不同函数的对象。目前,我设置它的方式是,在大多数情况下,对象的dialogHost值是未定义的。在极少数需要定义的情况下,我将其定义为类似“window.parent”的内容。以这种方式设置的问题是,每当我需要使用此成员变量时,我都必须先检查它是否已定义,如:Javascript 如何创建包含函数指针的对象成员变量,javascript,function,object,delegates,Javascript,Function,Object,Delegates,在Javascript中,我有一个对象,其中包含一个名为“dialogHost”的成员变量。它本身就是一个可以调用不同函数的对象。目前,我设置它的方式是,在大多数情况下,对象的dialogHost值是未定义的。在极少数需要定义的情况下,我将其定义为类似“window.parent”的内容。以这种方式设置的问题是,每当我需要使用此成员变量时,我都必须先检查它是否已定义,如: var myDelegate; if (typeof (myObject.dialogHost) !== 'undefin
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(...);
无需每次都进行上述检查。有办法做到这一点吗?在JavaScript中,非常好的做法是使用开发“尽可能避免全局变量”
我是否应该为中的dialogHost提供默认值“window” 这个案子否,不要依赖全局
窗口
对象。使用闭包和立即函数
谢谢,但我的意思是dialogHost本身也是一个对象(不是函数指针)。dialogHost包含一个函数指针。通常,dialogHost基本上是窗口对象。不幸的是,在脚本中定义了全局函数,更改它们将是一项更大的任务。
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(...);