2015-09-26 92 views
0

我在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 

回答

2

您在函数声明后缺少分号。这是我在我的Chrome控制台中运行的内容,我看到一切都按照它应该的方式工作。请参阅下面拨弄

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

0

当我运行它:) 据我所知,你应该避免延长阵列的原型,因为它可以改变它的默认行为,他们都将被执行。 你可以写一个“普通”的功能,做同样的事情,只是检查,如果输入的参数为前一个数组开始做别的事情(Array.isArray(yourArray)),这样你就不会污染不必要的功能,任何东西。

1

Runthis是正确的,但我想解释一下为什么。

分号一般都不会在JavaScript有用的,但像他这样的情况说明不使用它们的风险:

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

  • 的表达,随后在方括号([])东西也是一个有效的表达。

所以这两条线被解释为一个单一的表达,并且看起来像在第二行的阵列litteral实际上读作功能对象的无效索引。我会建议在添加一个分号开始,随着你的代码[(启动(除非它意味着继续课程的前行,)任何线路的

换句话说,你的代码被读作:

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