如何创建包含函数指针的对象成员变量

时间:2015-12-29 18:48:13

标签: javascript function object delegates

在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(...);

无需每次都进行上述检查。有没有办法做到这一点?

1 个答案:

答案 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(...);