2016-06-24 58 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