|
英文原文:For modern development Javascript indeed is a s?h?i?t? dissapointing language
我很抱歉,但 Crockford 就是堅持這么寫的(I’m sorry, but the Crockford arguments do not cut it.)。
Javascript 在很多方面都爛透了,而且還極其無趣。我就納了悶了,大家為啥都義無返顧、群情激奮的跳進 Node 學(xué)習(xí)的大軍里。是!Node 是比 Ruby 快,Node 是基于事件模型處理的,但讓我無法理解的是——一些人動不動就想把自己的程序用 Node 重構(gòu)一下,過過腦子行嗎!
Javascript 的繼承,深拷貝問題,不是定義一個新的 ECMA 標(biāo)準(zhǔn)就能解決的,不是套個漂亮的語法外殼(比如 CoffeeScript)就能搞定的,不是用 require 實現(xiàn)個標(biāo)準(zhǔn)化或者引入 classes 就可以萬事大吉的,ECMA 語言里不是有個引入 classes 的 ActionScript 嗎!那玩意跟 Javascript 一樣屎,只要大家繼續(xù)用它,php 框架的現(xiàn)狀就是 JS 的未來——一堆一堆的人前赴后繼,日以繼夜的為這坨屎一樣的語言搭框架、寫工具。
我來說一下為什么 Javascript 糟糕,當(dāng)然了,它也有好的方面。 但是問題就是太不實用,比如說原型繼承(prototypal inheritance)就限制頗多——因為這玩意說白了就是 function override,還有就是那句:“萬物皆 function” 也是相當(dāng)?shù)膹U柴——因為 function 不是一個對象,也不能當(dāng)做數(shù)據(jù)結(jié)構(gòu)來承載數(shù)據(jù)。
其實真正的吐槽才剛剛開始,隨便列幾個吧:
JS 的調(diào)用屬性
看這個屎一樣的設(shè)計,回顧過去,咱們很難苛責(zé)語言的設(shè)計人員,因為它們可能處于性能考慮。再者,如果不習(xí)慣消息-傳遞機制的語言的話,你會覺得“怎么一些屬性可以被調(diào)用而另外一些就不可以呢”!
哈希對象對于 stable 鍵不可用
對象和哈希的混合不是一個好點子,因為它違反了對象可以擁有 metadata 的前提,metadata 允許我們建立基本類型系統(tǒng)或者至少各種類型的 introspection。
函數(shù)對象對于類型系統(tǒng)不可用,因為一個對象不攜帶任何類型信息
這可是大事,Ruby 的世界里也是這樣,感覺所有的東西都在像鴨子一樣快樂的嘎嘎叫。我們經(jīng)常用 Object$class 來獲取對象信息,下面是給 HTML 元素加樣式的標(biāo)準(zhǔn)的流程:
<div class='<%= model.class %>' id='<%= [model.class, model.id].join %>' >…
it知識庫:對于現(xiàn)代開發(fā)來說,Javascript就是一種垃圾語言,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。