2017-06-20 127 views
-1

我試圖創建一個存根定義,下面的代碼可以使用通過:使用函數聲明作爲參數

func.calc({ 
 
    'divide': function(num1, num2) { 
 
    // do something 
 
    }, 
 
    'add': function(num1, num2, num3) { 
 
    // do something 
 
    } 
 
});

到目前爲止,我已經遇到麻煩參數傳遞給第二個參數中的函數。這是我一直在努力做的事情:

var func = { 
 
    calc: function(operationsArray) { 
 
    if (div) { 
 
     operationsArray[0](args); /* get args */ 
 
    } 
 
    else (add) { 
 
     operationsArray[1](args); /* get args */ 
 
    } 
 
    } 
 
}

是否有可能得到整個函數定義(帶參數和執行),當它被作爲參數在第一個片段方式通?

+0

我不明白你要根據你提供的僞代碼來做什麼。 –

+0

我不知道你在這裏問什麼。您的示例代碼太抽象,無法理解,並且無論如何都有語法錯誤。嘗試一個真正的[mcve] – Quentin

+0

重新編輯:點擊「運行代碼片段」。你有基本的語法錯誤! – Quentin

回答

0

您聲明func.temp作爲接受Array作爲第二個參數的方法。另一方面,你用Object作爲第二個參數來調用該方法。

JavaScript規範告訴我們,場順序不保證:

4.3.3對象 一個目的是對象的類型的成員。它是一個無序的屬性集合,每個屬性都包含一個原始值,對象或函數。存儲在對象屬性中的函數稱爲方法。

這意味着你不應該使用位置索引來訪問in_func & in_func2(即[0])。

你應該調用的函數,像這樣的數組:

func.temp(mainArg, [ 
 
    function(arg1, arg2) { 
 
    // do something 
 
    }, 
 
    function(arg1, arg2, arg3) { 
 
    // do something 
 
    } 
 
]);

OR,實現該功能,以便它使用明確的名字:

var func = { 
 
    temp: function(arg1, func_obj) { 
 
    // do something with arg1 
 
    if (trigger1) { 
 
     func_obj.in_func(/* get params */); 
 
    } 
 
    else (trigger2) { 
 
     func_obj.in_func2(/* get params */); 
 
    } 
 
    } 
 
}