【问题标题】:How to create object member variable that contains a function pointer如何创建包含函数指针的对象成员变量
【发布时间】:2015-12-29 18:48:12
【问题描述】:

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

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

【问题讨论】:

    标签: javascript function object delegates


    【解决方案1】:

    在 JavaScript 中,非常好的做法是使用 “尽可能避免全局变量”进行开发。

    我是否应该简单地为 dialogHost 中的“窗口”提供一个默认值? 这个案例? - ,不要依赖全局 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(...);
    

    【讨论】:

    • 谢谢,但我的意思是说 dialogHost 本身也是一个对象(不是函数指针)。 dialogHost 包含一个函数指针。通常,dialogHost 基本上是窗口对象。不幸的是,脚本中定义了全局函数,更改它们将是一项更大的任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多