2013-03-13 4 views
0

У меня проблемы с вызовом функции с параметрами, где имя функции хранится в переменной. Я использовал .call и .apply, чтобы попытаться вызвать функцию, но у меня не было большого успеха.javascript .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.apply или self[animation].apply я self.animation.apply is not a function. Как я могу использовать строковое значение, хранящееся в переменной, для вызова функции slideup() и передать ей соответствующие аргументы? Идея состоит в том, что переменная self.animation сохранит имя настраиваемой функции анимации, которая может быть переопределена через переданные параметры пользовательского плагина.

ответ

1

Вы получаете строку. Вы должны получить доступ к свойству, названному в честь этой строки: this[this.animation]();

+0

derp? Я знаю, что я получаю строку, может быть, полное расписание поможет объяснить, что вы имеете в виду? Я пробовал самостоятельно [self.animation] .apply' и 'this [self.animation] .apply' и все ту же ошибку. –

+0

Вы говорите, что мне нужно получить к нему доступ с уровня, на котором строка вернется как функция? –

+0

действительно работает для меня: http://jsfiddle.net/QNYSV/ – Ven

1

So Screen.animation - это строка, которая является именем функции. , , В этом случае вам нужно использовать квадратную нотацию для доступа к переменной (в соответствующей области). Предполагая, что slideup является глобальным методом, код, который вы ищете, -

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

Я решил сделать именно это ... Screen.animation находится внутри области плагина, и, хотя он может получить доступ к окну, я предпочел бы, чтобы он оставался в пространстве имен. поэтому я мог написать что-то вроде 'plugin [self.animation] .apply()' Я полагаю. Это хорошее предложение, я просто решил изменить свою функцию на имена переменных var и return вместо строк в инструкции switch. –

Смежные вопросы