为什么修改`Array.prototype`不起作用?

请参阅 - https://jsfiddle.net/53ranmn5/1

Array.prototype.method1 = function() {
console.log("method1 called");
}
[1,2,3,4].method1();

我收到以下错误,

TypeError:无法读取undefined属性'method1'

为什么这样? 我怎样才能解决这个问题?


你错过了一个分号:

Array.prototype.method1 = function() {
    console.log("method1 called");
}; // <--- Hi there!
[1,2,3,4].method1();

什么?

分号在JavaScript中是可选的,因此您编写的代码等同于:

Array.prototype.method1 = function() { ... }[1,2,3,4].method1();
// after evaluating the comma operator:
Array.prototype.method1 = function() { ... }[4].method1();
// naturally, functions don't have a fourth index
undefined.method1();
// Error :(

小心你的分号!

一些阅读材料:

  • 逗号是做什么的?
  • Javascript的自动分号插入(ASI)有哪些规则?
  • http://inimino.org/~inimino/blog/javascript_semicolons
  • 规格:最新稳定(es5),草案(es2015)。

  • 为我工作得很好,只是添加了一个字符:

    Array.prototype.method1 = function() {
        console.log("method1 has been called");
    };
    [1,2,3,4].method1();
    
    链接地址: http://www.djcxy.com/p/19043.html

    上一篇: Why modifying `Array.prototype` doesn't work?

    下一篇: Sort an array based on the length of each element