我正在研究Javascript Koans - 关于对象 - 问题#3 并且无法理解Object中的battleCry函数是如何工作的。 特别是部分
数组(noOfBrains + 1).join(“”+ this.mastermind)
当使用参数(4)调用函数时,它不是指(noOfBrains)= 4.因此
数组(4 + 1).join(“”+ this.mastermind)
这是否意味着数组有5个未定义的属性? 然后它由一个空间和主脑名称“Brain”加入。 我不知道下面的正确答案如何产生4 x“Brain”,那里没有循环函数吗?为什么它不是5 x“大脑”?
以下是具有正确答案的代码。
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);
});
答案 0 :(得分:1)
Array()
构造函数可以在没有new
的情况下调用,以便它返回与使用new
调用 时相同的事情 - 也就是说,一个具有给定数量未初始化元素的新数组实例。
.join()
函数根据一些明确定义的规则将每个数组元素转换为字符串,然后在数组元素的每个字符串之间返回一个带有参数的连接字符串.join()
。
undefined
的元素将转换为空字符串。因此,您的代码构建一个包含5个空(undefined
)元素的数组,并将它们与该表达式连接在一起,后跟this.mastermind
("Pinky"
)作为分隔符。在五个空字符串之间会有四个分隔符。