2015-05-29 31 views
0

我正在使用Javascript Koans - 关于对象 - 问题#3 并且无法理解对象内的battleCry函数的工作原理。 具体地,部分Javascript Koans - 关于对象 - 这个函数是如何工作的#3

阵列(noOfBrains + 1)。加入(”“+ this.mastermind)

当调用函数用参数(4),并不意味着( noOfBrains)= 4。因此

阵列(4 + 1)。加入(”“+ this.mastermind)

莫非此 array有5个未定义的属性? 然后加入一个空间和主脑名称“Brain”。 我不明白下面的正确答案如何产生4个“大脑”,那里没有循环功能吗?以及它不是5倍“大脑”?

下面是带正确答案的代码。

it("should know properties that are functions act like methods",function() { 
var megalomaniac = { 
    mastermind : "Brain", 
    henchman: "Pinky", 
    battleCry: function (noOfBrains) { 
    return "They are " + this.henchman + " and the" + 
     Array(noOfBrains + 1).join(" " + this.mastermind); 
    } 
}; 

var battleCry = megalomaniac.battleCry(4); 
expect("They are Pinky and the Brain Brain Brain Brain").toMatch(battleCry); 
}); 

回答

1

Array()构造被设计成可赎回无new,使其返回同样的事情它将如果它被称为与new —即用的初始化给定数的新数组实例元素。

.join()函数根据一些明确定义的规则将每个数组元素转换为一个字符串,然后在数组元素的每个字符串之间返回一个连接字符串,其参数为.join()

undefined的元素被转换为空字符串。因此,您的代码将生成一个包含5个空(undefined)元素的数组,并将它们与该表达式结合在一起,然后将this.mastermind"Pinky")作为分隔符。在五个空串之间会有四个分隔符。

+0

我明白了!谢谢你解释,我现在明白了! – Tinah

相关问题