文章目錄
  1. 1. 回顧
    1. 1.1. 無法接受的 oo js
  2. 2. 結論

從一開始誤入 js 到現在已經過很久了。變化也很大、越來越活絡了,但… 好像沒一開始的喜歡這個語言了。嗯、撇開膩不膩這件事,js 有非常多有趣的東西,其實不太會膩。但、我最近不太喜歡的是,這個語言本身。(<– 是有多任性.. T UT)

接下來、讓我回憶和分析下,也許最後會有個結論…吧?

回顧

早期、大家都不喜歡它,覺得他很難懂、很奇怪,各個 browser 上的情況非常的繁雜,但、其實我在認識了他半年後,還蠻喜歡的。因為是不純的 functional 吧!

對於大家曾經熱烈討論的 oo javascript,也跳進去研究了。因為我很疑惑,明明 js 就比較像 functional,為什摸要 oo,他又是怎摸實作 oo 的、還有大家說可以怎樣怎樣就能實作繼承。在試完得到我想知道的東西的這瞬間,讓我非常想哭、是哀傷,絕對不是感動的。

從那之後、對於 js 的各種 oo 方式,我都覺得噁心。有時候會用、但、覺得心裡很不舒服,雖然不用也可以,但是為了迅速、為了讓人看懂,還是用了。(每次都好想把手剁掉… T UT)

而現在 es6 出了,顯然… classinherit 都被納入標準,但我始終不敢去看當初讓我想傷心的原因,因為一看了、如果不符合期待、我可能再也沒辦法寫 js 了~。

我想、是我不願意接受借用某些技巧,達到某些目的,即使這些技巧背後並不合理。對,也許會讓所有的東西都變得更簡單、更好懂,但我不願意…,我沒有辦法接受它背後的不合理。(好像該談談哪裡讓我覺得不舒服?)

無法接受的 oo js

我必須先聲明,因為覺得噁心,所以、我已經很久沒有注意他這邊的實作是不是跟早期一樣了,都憑印象了歐~。(也許也有記錯的?)

以前的 oo js,是透過 prototype 實作的,後來 coffeescript 可以用跟其他語言類似的方式寫出來,但… 其實實作方式是一樣的。(沒用過 typescript 但… 是一樣的?)

而我不能接受的點在… inherit。單一層的 class 其實我可以接受。雖然我不喜歡 oo 、但我可以接受。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Parent {
...
method1() {}
method2() {}
}
class Child extends Parent {
...
method1_1(){}
method1_2(){}
}
var parentIns = new parent();
var childIns = new Child();

以上面為例(語法什摸的先不在意的前提啦~),log parentInschildIns 出來,會發現…

parentIns:

  • method1method2 會被放在 prototype

childIns:我看過兩種可能性,但、我都無法接受。

  • Parent 的 method1method2 和 Child 的 method1_1method1_2 混雜在 prototype。

    1
    2
    3
    4
    5
    6
    childIns
    - prototype
    - method1
    - method2
    - method1_1
    - method1_2
  • childIns 有兩層 prototype,第一層是 Parent 第二層才是 Child 的 method。

    1
    2
    3
    4
    5
    6
    7
    childIns
    - prototype
    - method1
    - method2
    - prototype
    - method1_1
    - method1_2

如果再加上 instance 的 data 們,那就會更噁心一點、狀況也會再多一些。
這無論哪個都是我不能接受的,也許有人會提出、既然這樣,就把他們調整成尼可以接受的方式就好啦~ 對、可以,但… 會有幾個問題。

  • 會比較慢,在 3 層以上的 inherit,因為 js 本來就不適合繼承(我認為啦~) 而且、不管是哪套實作,其實都有效能上的問題。
  • 在 Child 要實作 super 的時候有點麻煩。(當然、不只做 super 麻煩啦~ 要認真的寫出一套考慮各種情況的東西、真的、要很認真~ T UT)

再加上、後來有一陣子流行(?) oo ,然後看了各種奇怪的 oo 和繼承,那簡直是災難。雖然、我也試過不少腦殘的的寫法。本質上就是為了 oo 和 inherit 而寫的 js 。

而這些不愉快的回憶,導致我現在看到 classinherit 納入 standard ,其實不太能接受…。(其實、我本來就不太喜歡 new Function() 的寫法啦~) 也不太喜歡 promise,即使真的比較好看(?),但是、還是可以不喜歡的對吧!

結論

我想、如果我一直沒有離開 js 這圈圈,那我一定不會再去認真追究他實作的方式。雖然、真的很好奇吶~!但是、現在有越來越多的 plugins 都用到這樣的寫法,不得不接受啊~!因為這是這語言成長的方向。但是、心中對他的想法,是自己可以決定的。

如同我一直認為、沒有任何一個語言是不必要的存在,因為那是一個群體對世界的看法。但是、個人觀感是可以的喜歡、不喜歡、討厭什摸的。 js 還是有很多新的有趣的地方,是我還沒有拿來玩的,還是蠻讓人喜歡的啦~!所以、再糾結下好了,也許會把他歸類在觀察中。讓我再找到個熟悉好玩的語言在流放它~ w+

文章目錄
  1. 1. 回顧
    1. 1.1. 無法接受的 oo js
  2. 2. 結論