我尝试使用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
答案 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)),这样您就不会使用不必要的函数污染任何内容。