2015-09-26 125 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();