1

将函数名称作为参数传递给另一个函数似乎对我不起作用。

我已经尝试了我能找到的每篇文章的每一种变体。目前,我在一个 js 文件中有这个:

function callThisPlease (testIt){
    alert(testIt);
}

$(document).ready(function () {
    $.fn.pleaseCallTheOtherFunction('callThisPlease');
});

我在另一个有这个:

$(document).ready(function () {

    $.fn.pleaseCallTheOtherFunction = function(functionName){
        window[functionName].apply('works');
    }

});

铬控制台说Uncaught TypeError: Cannot call method 'apply' of undefined

请帮忙。提前谢谢了!

4

2 回答 2

3

如果方法未定义 on window,则意味着您的函数不是全局的。让它成为一个全局函数。


此外,您可以摆脱.apply. 目前您正在'works'作为this值传递。

window[functionName]('works');
于 2013-02-12T15:20:31.157 回答
2

jsFiddle 演示

设置

首先,您需要设置pleaseCallTheOtherFunction方法,如下所示:

$.fn.pleaseCallTheOtherFunction = function(otherFunction) {
    if ($.isFunction(otherFunction)) {
        otherFunction.apply(this, ['works']);
    }
};

用法

然后你会想要创建你的“替换”函数(委托),然后不带引号调用它,如下所示:

function callThisPlease (testIt){
    alert(testIt);
}

$(document).ready(function () {
    $().pleaseCallTheOtherFunction(callThisPlease);
});

或者

您可以编写一个内联函数:

$(document).ready(function () {
    $().pleaseCallTheOtherFunction(function(testIt) {
        alert(testIt);
    });
});
于 2013-02-12T15:19:54.487 回答