2016-06-24 55 views
0

嘿傢伙我是一個總的Js新手。這裏是JsBin linkformLetter測試應通過。任何幫助將不勝感激。從javascript中的函數屬性返回連接的字符串

TL; DR:

此:

var formLetter = function(recipient, msg, sender) { 
    return "Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender 
    }; 
console.log(formLetter("Hermione", "Luna","How are you?")); 

應返回:

"Hello Hermione, 

How are you? 

Sincerely, 
Luna" 

而是我得到這個:

"Hello [object Object], 

undefined 

Sincerely, 
undefined" 

編輯:對不起,困惑。我正在研究一個JsBin中的不同問題。這是正確的JsBin與隔離code

+0

那麼,它告訴你'recipient'是一個對象,而不是一個字符串,並且'msg'和'sender'在調用formLetter時都沒有給出,或者它們被賦予值'undefined'。您的問題中沒有顯示該電話,所以我們無法提供幫助。請參閱:[mcve] –

回答

1

這是因爲您只獲取一個傳入函數調用的對象。該對象包含您需要的信息來代替您提供的命名的arugments。

第一個參數recipient[object Object]告訴你它是一個對象。 undefined意味着什麼都沒有通過他們的地方。這表示傳遞給函數調用的配置或參數對象的常見模式。正因爲如此,作爲命名參數的東西應該是作爲第一個參數提供的對象的屬性外觀。

你的函數定義應該看起來更像是:

var formLetter = function (letter) { 
     // do something with letter 
    }; 

內部的函數調用,您可以接着打信對象的屬性,看看它們是否包含你所需要的,否則在開發工具console.log調試將有助於追蹤。

希望有所幫助。如果它不足以讓你走上正軌,請告訴我。樂於幫助。

+0

謝謝,這澄清了我的一些問題。這和@Martin Johansson的消息。 – intercoder

0

行:

var formLetter = function(recipient, msg, sender) { 
    return "Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender 
}; 

在你的榜樣,需要 「發送」 後一個分號,如:

var formLetter = function(recipient, msg, sender) { 
    return "Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender; 
}; 

你不確定有關,使用了有效的console.log

你這樣做:

console.log(longMessage.formLetter("Hermione", "Luna","How are you?")); 

,並(在JsBin)你也:

var longMessage = { 
    formLetter: function(recipient, sender, msg) { 
    console.log("Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender); 
    } 
}; 

在你的問題的例子你有他們糾正。

請仔細檢查您發佈的代碼。

0

在jsbin中查看您的測試後,我注意到在您的assert.deepEqual()方法中,您運行formLetter(letter)並將其與您創建的連接字符串進行比較。 問題是formLetter()需要三個字符串值,並向它發送一個對象(字母)。這就是爲什麼你在第一個位置獲得[Object object]並且在其他位置未定義的原因。

你應該在你的斷言中運行formLetter(letter.recipient, letter.msg, letter.sender),它應該正常工作。

+0

謝謝,這給了我一些關於如何使用我的'letter'對象的提示 – intercoder