用JavaScript正确包装函数

Properly wrapping functions in JavaScript

本文关键字:包装 函数 JavaScript      更新时间:2023-09-26

我有以下问题:

我有一个功能

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

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

你可以这样做:

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变量没有任何作用。