2014-01-10 68 views
0

任何人都可以幫助我從數組中調用具有參數的函數。我寫了下面的示例,但在端我收到錯誤「未捕獲的類型錯誤:對象的屬性‘0’[對象數組]不是函數從列表中調用函數

function add(a, b){ 
    console.log("Addition: " + (a + b)) 
} 

function sub(a, b){ 
    console.log("Subtraction: " + (a - b)) 
} 

function multi(a, b){ 
    console.log("Multiplication: " + (a * b)) 
} 

function div(a, b){ 
    console.log("Division: " + (a/b)) 
} 

var fList = [add(1,1), sub(1,1), multi(1,1), div(1,1)]; 

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

的jsfiddle:http://jsfiddle.net/k5grM/

+0

試... window.call(FLIST [1]); – Jason

+1

@Jason這將如何幫助? 'fList'是一個數組數組,而不是一個函數數組。 – Barmar

回答

2

的括號實際上調用了該函數,因此當你將每一個添加到列表中時,它就會在那裏調用它。你真的是從函數中創建一個返回值的數組。

0

你可能會想這樣做,作爲一個對象,而不是作爲一個數組:

var fList = { 
add: function(a, b){ 
    console.log("Addition: " + (a + b)) 
}, 

sub: function(a, b){ 
    console.log("Subtraction: " + (a - b)) 
}, 

multi: function(a, b){ 
    console.log("Multiplication: " + (a * b)) 
}, 

div: function(a, b){ 
    console.log("Division: " + (a/b)) 
}, 
} 
+1

他想要一個調用具有特定參數的函數的數組。 – Barmar

+0

大概是真的 - 我喜歡這種方式更好:) –

0

錯誤消息說,這一切。 fList [0]不是一個函數 - 你已經將它定義爲add(1,1),這可能是未定義的,因爲你不會從add()返回任何東西。你想要的是沿着線的東西:

var add = function(a, b) { 
    return a + b; 
}; 

// (...) 

var fList = [add, ...]; 

// (...) 

然後在循環中你會:

fList[i](1, 1) 
0

您不妨考慮一下返工你的代碼,以更多的東西一樣......

var fList = [ 
    { method: add, args: [1,1] }, 
    { method: sub, args: [1,1] }, 
    { method: muti, args: [1,1] }, 
    { method: div, args: [1,1] 
}]; 

for (var i = 0; i < fList.length; i++){ 
window.apply(null, fList[i].method, fList[i].args); 
} 
0

您正在創建一個返回值數組,而不是一個函數數組。用途:

var fList = [ 
    function() { add(1,1); }, 
    function() { sub(1,1); }, 
    function() { multi(1,1); }, 
    function() { div(1,1); } 
]; 

您可以添加到fList動態像這樣的東西:

flist.push(function() { add(2, 3); }); 
+0

感謝Barmar,但再次懷疑。如何動態添加函數列表到fList?我有一個與添加(1,1)一個json的json。在處理json時,我需要將這個propery添加到fList,並且在最終的惡意進程中調用這個函數。 – Kirubaharan

+0

你在JSON中如何獲得'add(1,1)'? JSON只能表示數組,對象,數字和字符串。 – Barmar

+0

對不起,它不是JSON。它的一個對象。雖然處理,我動態分配參數,並添加到fList最後處理 – Kirubaharan