调用数组原型函数

时间:2015-09-26 09:36:05

标签: javascript

我尝试使用chrome,下面不正确的原因是什么?

 Array.prototype.ts= function () {
          alert("hallo")
      }

[1, 9, 8, 7, 6, 5, 3, 4, 5, 2, 0].ts(); //not ok - what is the reason?
([1, 9, 8, 7, 6, 5, 3, 4, 5, 2, 0]).ts(); //ok

3 个答案:

答案 0 :(得分:2)

您在函数声明后缺少分号。这是我在我的Chrome控制台中运行的内容,我看到一切正常。请参阅下面的小提琴

Array.prototype.ts = function() { alert('test') };
[1,2,3].ts()

答案 1 :(得分:1)

Runthis是正确的,虽然我想解释原因。

分号通常在JavaScript中没用,但是这样的情况说明了不使用分号的风险:

  • 函数声明是一个有效的表达式。

  • 括号([])后面的表达式也是一个有效的表达式。

因此,这两行被解释为一个单独的表达式,并且第二行上看起来像数组litteral的内容实际上被读作函数对象的无效索引。我建议在代码中以[(开头的任何行的开头添加分号(当然,除非它意味着继续前一行)。

换句话说,您的代码读作:

Array.prototype.ts= function () { /*…*/ }[1, 9 /* etc */].ts();

答案 2 :(得分:0)

当我运行它们时,它们都被执行了:) 据我所知,你应该避免扩展Array原型,因为它可以改变它的默认行为。 您可以编写一个“普通”函数来执行完全相同的操作,只需在开始执行任何其他操作之前检查输入参数是否为数组(Array.isArray(yourArray)),这样您就不会使用不必要的函数污染任何内容。