天天看點

JavaScript 有多靈活?

javascript 是一種靈活的語言,表達力極強,我來舉一個例子,保證讓很多人大吃一驚。

JavaScript 有多靈活?

首先,在 number.prototype 對象上,部署一個 add 方法。

由于 number 的執行個體就是數值,在數值上調用某個方法,數值會自動轉為執行個體對象,是以就得到了下面的結果。

上面代碼中,調用方法之是以寫成<code>8['add']</code>,而不是<code>8.add</code>,是因為數值後面的點,會被解釋為小數點,而不是點運算符。

将數值放在圓括号中,就可以使用點運算符調用方法了。

其實,還有另一種寫法。

上面代碼的第一個點解釋為小數點,第二個點解釋為點運算符。為了語義清晰起見,下面我統一采用圓括号的寫法。

由于add方法傳回的還是數值,是以可以鍊式運算。

上面代碼在number對象的執行個體上部署了subtract方法,它可以與add方法鍊式調用。

如果使用方括号調用屬性,寫法會很古怪。

我們還可以部署更複雜的方法。

上面代碼在 number 對象的原型上部署了 iterate 方法,可以将一個數值自動擴充為一個數組。

總之,現在我們可以在數值上直接調用方法了,但是後面一對圓括号看着有點礙眼,有沒有可能去掉圓括号呢?也就是說,能不能将下面的表達式

寫成另一種樣子?

這是可以做到的。

上面代碼在 number.prototype 上定義了兩個屬性 double 和 square ,以及它們的取值方法 get 。

是以,在任一數值上,讀取這兩個屬性,就可以寫成下面的樣子。

也可以改用方括号運算符。

(完)

繼續閱讀