2011-06-20 58 views
1


我有一個像JavaScript結構的類,我試圖調用一個使用傳入函數名稱的兄弟功能。
這是難以解釋那麼讓我告訴你什麼即時試圖完成一個例子..動態函數調用一個類的功能,使用settimeout

function windowFactory(){ 
    this.init = function(functionName,args[]){ 
     SetTimeout(functionName(args),2000) 
    } 
    this.func1 = function(var1){ 
     alert(var1); 
    } 
    this.func2 = function(var1, var2){ 
     alert(var1+var2); 
    } 
} 
var win1 = new windowFactory(); 
win1.init("func1","hello"); 
var win2 = new windowFactory(); 
win2.init("func2","world","!"); 

請注意,這只是一個演示功能,語法錯誤/錯別字包括在內。
現在我有這個使用可怕的評估和演示工作時,它是類外...

eval(funcName+"('"+darray[1]+"','"+darray[2]+"')"); 

它只是要求它是外部類和虛值過去了參數

回答

1

像這樣的東西應該訣竅:

var windowFactory = function() { 
    var self = this; 
    this.init = function(functionName){ 
     var args = Array.prototype.slice.call(arguments, 1); 
     setTimeout(function() { 
      self[functionName].apply(self, args); 
     }, 2000); 
    }; 
    this.func1 = function(var1){ 
     alert(var1); 
    }; 
    this.func2 = function(var1, var2){ 
     alert(var1+var2); 
    }; 
}; 
var win1 = new windowFactory(); 
win1.init("func1","hello"); 
var win2 = new windowFactory(); 
win2.init("func2","world","!"); 

請注意自定義自引用var self = this;。這是因爲當調用超時函數時,this對象將是window(至少在Web瀏覽器中)。

另一個澄清:爲了解決在JavaScript中的特定對象屬性,你可以做以下幾種方式:

object.property; // Or 
object['property']; // When you have a string literal, like in your example 
+0

太謝謝你了!這正是我期待的。這一直困擾着我好幾天! –

+0

太棒了!我很高興我可以幫助:) – Betamos

相關問題