2012-04-25 58 views
3

我已經構建了一個GUI,它傳入一個長JS對象作爲動畫插件的設置。其中一個設置允許用戶在動畫完成後調用一個函數。不幸的是,它必須作爲一個字符串傳遞給JS對象。避免EVAL並通過此功能?

... [ 'functioncall()' ] ...... 

在我的動畫回調中,我檢索這個字符串並試圖將其作爲函數運行。

第一次嘗試的作品完美,但使用eval ...

eval(OS.path_jscall[index].path_jscall[0][i]) 

我設置一個更優選的方法,像這樣:

var HookFunction=new Function(OS.path_jscall[index].path_jscall[0][i]); 
HookFunction(); 

兩個例子都完全調用functioncall()函數。我不知道如何(這)傳遞給functioncall()雖然...

functioncall(obj){ console.log(obj); }; 

一切都不斷提到窗口。有任何想法嗎?謝謝!

+0

可能重複的[Javascript:如何設置「this」變量很容易?](http://stackoverflow.com/questions/456967/javascript-how-to-set這個變量很容易) – 2012-04-25 00:23:41

+0

「它必須作爲一個字符串傳遞給JS對象」爲什麼? – outis 2012-04-25 01:16:39

回答

3

假設HookFunction這個名字,你可以做無論是call()apply()

HookFunction.call(this,arg1,arg2,...,argN); 

//or 

HookFunction.apply(this,[arg1,arg2,...,argN]); 

的根本區別2是call()接收到你的「this」和一個枚舉後的參數列表,而apply()收到你的「this」和一個參數數組

+0

工作完美!非常感謝你,它需要一個額外的步驟,在字符串調用中添加'this'。你真棒! – Aaron 2012-04-25 00:27:00

3

調用你的函數時使用.call.call將第一個參數分配給this變量。

var myFunction = function(arg1, arg2) { 
    alert(this); 
} 

myFunction.call(this, "arg1", "arg2"); 

使用你的第二個例子,你可以這樣做:

HookFunction.call(this);