2

我有一個Graph類,我想將其原型函數傳遞給另一個函數。這裏是類如何通過一個原型函數和在javascript中使用

function Graph(opts) { 
    this.filled = opts.filled; 
    this.max = opts.max || 50; 
    this.min = opts.min || 0; 
    this.fixed = 60; //px 

    this.transitionArr = []; 
    this.timeoutArr = []; 
}; 

Graph.prototype.stopAnimation = function() { 
    //stop any css3 transition by removing animation properties 
    this.removeAnimProps(); 
    //stop if there is any timeout 
    for (var i = 0; i < this.timeoutArr.length; i++) { 
     clearTimeout(this.timeoutArr[i]); 
    } 

    for (var i = 0; i < this.transitionArr.length; i++) { 
     this.transitionArr[i].stop(); 
    } 
}; 

而我正在試圖做的做的一個小片段代碼通stopAnimation功能遍歷所有對象,停止所有動畫中的所有對象:

function iterateOverAll(userFunc){ 
    for (var i = 0; i < GraphArr.length; i++) { 
     GraphArr[i].userFunc(); 
    } 
} 

iterateOverAll(Graph.prototype.stopAnimation); 

然而,我不知道該怎麼做。請幫忙嗎?

回答

3

如果你想使用的功能參數,你可以通過這樣的:

function iterateOverAll(callFunc){ 
    for (var i = 0; i < GraphArr.length; i++) { 
     callFunc.apply(GraphArr[i],[]); 
    } 
} 

iterateOverAll(Graph.prototype.stopAnimation); 

這將調用你的函數在所有對象,但不帶任何參數。我認爲你可以修改這個函數的任何參數。

+0

謝謝。我不知道應用了這個功能。 – 2013-03-05 11:41:53

0

如果您已有一系列圖形,則無需傳遞該函數。

function iterateOverAll(){ 
    for (var i = 0; i < GraphArr.length; i++) { 
     GraphArr[i].stopAnimation(); 
    } 
} 

iterateOverAll(); 
+0

我知道,但我確實有很多功能,比如'stopAnimation'。例如,'startAnimation','resetAnimation','resetGraph'。因此,我需要以通用的方式來完成。 – 2013-03-05 09:52:07

相關問題