2014-02-16 85 views
1

所以我試圖使日誌記錄更好,當試圖記錄一組對象或數組,而不僅僅是說「object [object]」,而是我通過一些參數調用模塊的函數有問題。出於某種原因,這兩者之間有區別。從模塊外部調用函數 - 參數傳遞不正確

console.log(createMessage("Message: {0}", "hello")); //logs Message: hello 
                // (what I actually want) 

specialConsole.writeLine("Message: {0}", "hello"); //logs ["Message: {0}", "hello"] 

第一個日誌從模塊調用,第二個 - 從外部調用。這是什麼specialConsole.writeLine返回:

writeLine: function() { 
    console.log(createMessage(arguments)); 
} 

所以我只是想調用第一個日誌,但使用specialConsole.writeLine。對不起,如果我的問題太愚蠢,但我仍然是一個初學者。 Here is my full code in jsfiddle

回答

1

當傳遞兩個參數來writeLinearguments特殊變量將保持二者在狀物體的陣列中的值和要傳遞,因爲它是對createMessage即假設你實際上傳遞數組和打印數據,因爲它是。

爲了解決這個問題,

writeLine: function() { 
    console.log(createMessage.apply(null, arguments)); 
} 

Function.prototype.apply函數傳遞所有從像對象的數組中的元素,作爲單獨的參數。

0

我認爲這兩者之間的區別在於,您將參數作爲列表傳遞,而不是作爲單獨的參數傳遞。爲了糾正,你將不得不這樣做:

writeLine: function() { 
    console.log(createMessage(arguments[0], arguments[1]); 
} 

您看到區別,但這種方式不一樣乾淨,如果你想傳遞多個參數,你將需要擴大所有那些爲好。

我會建議擴大createMessage來接受數組。

+0

好吧,它會比較複雜,因爲createMessage的目的是從數組和對象中獲取信息,當它通過數組數組的時候,對我來說寫起來太複雜了。我仍然是初學者...你能提出一種方法來調用所有參數的specialConsole.writeLine嗎?用某種循環或什麼東西? – user3127242

+0

@ user3127242你不需要這些。請檢查我的答案。 – thefourtheye

+0

@thefourtheye哦,這是一個更好的方法來做到這一點。我沒有意識到有一種功能可以爲我做。 – Maistho