【问题标题】:Properly wrapping functions in JavaScript在 JavaScript 中正确包装函数
【发布时间】:2012-02-02 04:08:31
【问题描述】:

我有以下问题:

我有一个函数

workspace.func = function() {console.log(5);}

我将它作为事件处理程序附加:

$(workspace).bind("ping", workspace.func);

然后,我更改函数定义:

var cF = workspace.func;
workspace.func = function() {
   ...
   cf.call(this);
}

但是

$(workspace).trigger("ping")
>>5

如何在运行时正确包装函数,以便处理程序也指向已更改的函数?

【问题讨论】:

    标签: javascript jquery events function closures


    【解决方案1】:

    你可以这样做:

    workspace.func = function() {console.log(5);}
    $(workspace).bind("ping", function() {workspace.func()});
    
    var cF = workspace.func;
    workspace.func = function() {
       ...
       cf.call(this);
    }
    

    重新分配workspace.func 的值后,ping 事件处理程序将转到新函数,因为它从变量中获取函数指针,然后执行它,因此如果您更改该变量指向的函数,它将拾取新值 - 与您的原始版本不同,它引用了实际函数,因此更改 workspace.func 变量没有做任何事情。

    【讨论】:

    • +1 或者,您可以让 workspace.func 包装不同的 mmber 函数调用,并重新分配 that 函数而不是 workspace.func。
    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多