带有函数的Javascript语法

时间:2015-03-04 14:39:11

标签: javascript syntax

我不确定这意味着什么或如何正确地说出问题。

在第一个例子中,我可以将变量放在函数" numbers1.forEach(...)"之前。但在第二个例子中,我不能" num.square()"?

function forEach(array, action) {
  for (var i = 0; i < array.length; i++)
    action(array[i]);
}

var numbers2 = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers2, function(number) {
  sum += number;
});
console.log(sum);
// → 15

var numbers1 = [1, 2, 3, 4, 5], sum = 0;
numbers1.forEach(function(number) {
  sum += number;
});
console.log(sum);
// → 15
// this works!

但这不起作用

var square = function(x) {
  return x * x;
};

var num = 12;
console.log(square(num));
// → 144

console.log(num.square());
// → TypeError: undefined is not a function (line 9)
// does not work?

谢谢!

3 个答案:

答案 0 :(得分:2)

语法方面,没有&#34;魔法&#34;发生在这里。你描述了两件截然不同的事情。

在第一个示例中,您将Array传递给您自己定义的forEach方法。在第二个示例中,您正在调用的forEach实际上是Array上的内置方法(请参阅MDN)。如果您将 forEach更改为不调用action,则会发现您的内容中断,第二个仍然有效。

您可以自己实现此功能。您可以向Number添加一个函数以使您的第二个示例正常工作(尽管这不是推荐的做法,因为它可能会与未来的JavaScript功能[以及许多其他原因]相冲突或破坏现有功能):

&#13;
&#13;
Number.prototype.square = function() {
      return this * this;
};

var num = 12;
var squared = num.square();

alert(squared);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

数组的示例有效,因为JavaScript(ECMAScript5)中的Array定义了forEach函数。

带有数字的示例不起作用,因为Number未定义square功能。您可以扩展Number以包含方形函数,如下所示:

Number.prototype.square = function(x) {
  return this * this;
};

答案 2 :(得分:0)

如果从第一个示例中删除forEach函数,它仍然有效,这是因为Array类型具有内置forEach函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

或者尝试将forEach功能更改为each,您会发现它将不再有效。

您要做的是向现有类型添加新方法。这不是JavaScript中的好习惯。