Javascript Koans - 关于对象 - 这个功能在#3

时间:2015-05-29 05:57:55

标签: javascript arrays object

我正在研究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);
});

1 个答案:

答案 0 :(得分:1)

Array()构造函数可以在没有new的情况下调用,以便它返回与使用new调用 时相同的事情 - 也就是说,一个具有给定数量未初始化元素的新数组实例。

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

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