javascript - 动态函数调用(应用)

标签 javascript

我正在尝试动态调用对象内部的函数。找到了 apply 函数但没有完全理解它。查看下面的代码,通过触发 Test.checkQueue() 它应该依次调用 showSomething “方法”。谢谢。

var Test = {    
    , queue : [{action:'showSomething', id:'1234'},{action:'showOther', id:'456'}]
    , showSomething: function(what) {
        alert(what);    
    }
    , checkQueue : function() {
        console.log('checkQueue');
        console.log(this.queue);
        if (this.queue.length) {
            var do = this.queue.shift();
            console.log(do);
            // action.action(action.id);
            do.action.apply(this, do.id || []);
        }
    }

};

最佳答案

您在这里使用 apply 有(至少)两个问题。

  1. 它是一个函数对象的方法,你好像是在字符串上调用它

  2. 它始终将数组作为其第二个参数——您传入的是字符串或空数组。

试着这样调用它:

Test[do.action].apply(this, do.id ? [do.id] : []);

使用 Test[do.action] 将访问实际函数,而不是字符串“showSomething”或“showOther”,以及 do.id ? [do.id] : [] 将始终返回一个数组。

关于javascript - 动态函数调用(应用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884793/

相关文章:

javascript - 如何在 Greasemonkey 中为 firefox 创建快捷方式?

javascript - 优化数组的结果

javascript - ReferenceError : dc is not defined, 即使在按顺序导入 d3、dc 和 crossfilter 之后

javascript - 不明白为什么这段代码有效

javascript - 扩展执行似乎在 Windows 10 通用 JavaScript 应用程序中不起作用

javascript - 在 Javascript 中是否有可能在屏幕的另一侧重复一个被剪切的对象?

javascript - HTML 注释 <!-- 是否充当 JavaScript 中的单行注释,为什么?

javascript - 使用 JavaScript 动态切换占位符颜色

javascript - 在 JavaScript 中制作函数副本的技术如何工作(故事书示例)

javascript - 为什么此代码适用于输入文本框,但不适用于 contenteditable div?