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