带有变量函数名称的javascript .apply

时间:2013-03-13 16:00:13

标签: javascript jquery jquery-plugins

我在使用params调用函数时遇到问题,其中函数的名称存储在变量中。我一直在使用.call.apply来尝试调用该函数,但我没有取得多大成功。

这是我尝试过的:

function slideup(){
//exec animation

}

Screen.prototype.init = function() {
    //has access to `this`, Screen is instantiated via constructor and passed the calling element 
    var self = this;

    self.animation = 'slideup';//this is a switch in my code with default val of 'slideup'  

    function hashChange(){

        self.animation.apply(self, [arg1,arg2]);
    }
}

如果我用self.animation.apply替换slideup.apply ...函数正常运行,但当我运行self.animation.applyself[animation].apply时,我得到self.animation.apply is not a function。如何使用存储在变量中的字符串值来调用slideup()函数,并将其传递给正确的args?我们的想法是self.animation变量将存储自定义动画函数的名称,可以通过自定义插件传递的选项覆盖它。

2 个答案:

答案 0 :(得分:1)

你得到一个字符串。您必须访问以此字符串命名的属性: this[this.animation]();

答案 1 :(得分:1)

所以Screen.animation是一个字符串,它是一个函数的名称。 。 。在这种情况下,您需要使用方括号表示法来访问变量(在适当的范围内)。假设slideup是一个全局方法,那么您要查找的代码是

window[self.animation].apply(self, [args]);