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