自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

重思JavaScript的JavaScript

移動(dòng)開發(fā)
一個(gè)只花了10天就開發(fā)完成的腳本語言,自從誕生開始,就一直成為人們爭論的焦點(diǎn)。盡管這樣,它在編程語言中地位仍然無法動(dòng)搖,全世界有幾百萬學(xué)習(xí)者和粉絲。

最近,我和許多程序員一樣,對(duì)JavaScript進(jìn)行重新探討。事實(shí)上,JavaScript是一個(gè)非常有能力的語言,但使用新JavaScript一年后,我得出的結(jié)論卻是JavaScript仍然很爛。我并不是在討論其古怪的比較運(yùn)算。而是從更深的層次去思考。與此同時(shí),還會(huì)提供一些解決方案供你選擇。


 

[[106567]]


 

直奔主題

13歲時(shí),父親送給我第一本編程書籍——JavaScript初學(xué)者編程。讓我興奮的是,我發(fā)現(xiàn)電腦并不單單是由電線和發(fā)條所組成,里面的代碼清晰明了。我覺得我基本上理解它了,實(shí)際上也差不多。終究,代碼除了人類理性思想的形式化還能是什么?

說實(shí)話,我當(dāng)時(shí)希望遇到的是Java,我甚至在谷歌上搜索:“JavaScript和Java是同一種語言嗎?”當(dāng)然不是。所以Java成為了我學(xué)習(xí)的第二門語言,不過我母親和繼父不希望在家庭電腦里安裝軟件,所以我無法安裝Java編譯器。我清晰地記得,在把代碼上傳到一個(gè)在線編譯器之前,得反復(fù)檢查代碼,然后等待、下載jar包……

我當(dāng)時(shí)認(rèn)為,JavaScript是一個(gè)非常嚴(yán)肅的語言。在Notepad里新建一個(gè)HTML文件,然后在IE里打開,就這樣開始了。沒有類、沒有私有和公有方法,沒有final變量。當(dāng)時(shí),我甚至不知道什么叫“過度設(shè)計(jì)”,但它準(zhǔn)確地描述了我印象中的Java:

  • 無需編譯
  • 無處不在的開發(fā)平臺(tái)
  • 沒有高級(jí)語言特性
  • 查看源文件

為什么這么偉大的語言還會(huì)討人厭?

Ad-hoc地獄

下面是一些問題:設(shè)計(jì)之匆忙、初衷僅僅實(shí)現(xiàn)簡單的網(wǎng)頁互動(dòng)、JavaScript繼承完全缺乏設(shè)計(jì)指導(dǎo),一切都是ad-hoc:

  1. 沒有OOP:JavaScript確實(shí)存在基本的對(duì)象模型,但幾乎無人知道它是如何工作的。
  2. 沒有標(biāo)準(zhǔn)庫:從論壇上復(fù)制粘貼代碼不好玩。
  3. 沒有模塊系統(tǒng):不斷查找下載鏈接和很長的源文件。
  4. 缺乏語言資源:沒有高品質(zhì)的資源(幾乎沒有一本像樣的書籍)意味著你只能從論壇或博客上獲得一些非官方的參考。

既然JavaScript有這么多缺陷,到底是什么讓它如此流行?

復(fù)興

JavaScript崛起的背后可能與谷歌V8引擎息息相關(guān)。JavaScript突然變得很快,真正地快速。所以人們開始硬著頭皮使用它來編寫Web應(yīng)用程序。

然而,Node.js推出了一些更吸引人的基準(zhǔn),允許代碼在客戶端和服務(wù)器端重用,很像MeteorDerby。因此,情況開始好轉(zhuǎn):

  1. 下載按鈕變得更大
  2. Node.js kind of sort of standardized an import system
  3. 人們可以編寫更好的庫
  4. 優(yōu)秀的資源開始出現(xiàn)

然而:

  1. 仍然沒有采用OOP
  2. 客戶端和服務(wù)端的JavaScript仍然沒有關(guān)聯(lián)
  3. 文檔甚至是高知名度項(xiàng)目文檔也很糟糕

為什么?

我認(rèn)為現(xiàn)代JavaScript仍然較爛的根源是其處在一個(gè)特定的社區(qū)氛圍中,該氛圍一直強(qiáng)調(diào):JavaScript是一門非常好的語言,但卻一直被人誤解。不,JavaScript只是一個(gè)提早誕生且沒有先例可循的語言。停止包庇并且開始把JavaScript作為一個(gè)平臺(tái)去擁抱,作為一個(gè)編譯目標(biāo)。

文檔

人們可以盡情嘲笑Java,但當(dāng)我看Java文檔時(shí),我可以非常明確地知道哪個(gè)對(duì)象可以創(chuàng)建、每個(gè)方法里的參數(shù)、需要拋出的異常等。最好的事情莫過于使用JavaScript庫作為精選示例代碼。這幾乎是不可能寫出正確的軟件,除非你閱讀庫源碼。甚至連如此完整的JavaScript項(xiàng)目Express也存在令人生厭的API文檔(Ember他們那些非常優(yōu)秀的API文檔可能是反例)。

語法糖

JavaScript社區(qū)很快就拋棄了語法糖。語法糖是極富創(chuàng)造力的。將重復(fù)邏輯代碼抽象出來,可以通用,幫助程序員以更好的方式編寫代碼。

  • 讓代碼更加簡潔
  • 有助于表達(dá)代碼背后的意思,而不是算法。我已經(jīng)知道了數(shù)組迭代算法,好吧,謝謝你,但是請(qǐng)你不要告訴我這些,我只想知道你要做的東西。

作為一名編碼人員,你的主要觀眾不是電腦,而是其他程序員,也包括將來的自己。書寫冗長的for循環(huán)很爽,但說實(shí)話,for (var i=0; i<arr.length; i++)與for e in arr 比起來,人們更愿意讀后者。順便說一下,這里的JavaScript版的循環(huán)比CoffeeScript速率要慢,你知道為什么嗎?

JSLint

如果程序員使用JavaScript尚未感到痛苦,那JSLint成功做到了這點(diǎn),而且非常“成功”! 想象一下,在某個(gè)編碼的新兵訓(xùn)練營里,想要對(duì)JavaScript進(jìn)行尷尬的懲罰,然后在其身上進(jìn)行拔毛,這好比是拿著牙刷在刷廁所。事實(shí)上,我寧愿從牦牛身上拔毛。這是原文中的例子,小編的理解是JSLint的出現(xiàn)是給JavaScript挑刺的,而這樣還不如直接在JavaScript身上拔毛。


 

[[106568]]


 

更值得注意地是,作為程序員,我們應(yīng)該尋找自動(dòng)化,難道你不希望自己可以自動(dòng)化JSLint嗎?當(dāng)然,你可以。CoffeeScript可以***的生成linted代碼,正如Jeremy。

OOP

JavaScript對(duì)象模型還是不夠成熟,原型(Prototype)繼承是一個(gè)低級(jí)別的功能,可以創(chuàng)建一些非常有意義的對(duì)象模型,但卻無法基于本身進(jìn)行構(gòu)建。

這也可能是JavaScript API為什么會(huì)那么糟糕的原因,當(dāng)你所使用的語言甚至沒有類時(shí),該如何記錄面向?qū)ο蟠a呢? 最重要的是,當(dāng)我們甚至不知道實(shí)例化對(duì)象時(shí),JavaScript開發(fā)人員該如何實(shí)行互操作?

有什么可選項(xiàng)嗎?

年復(fù)一年,筆記本逐步成為主流、政壇也發(fā)生了不少的變化,而JavaScript仍然保持不變。你愿意等一些基本特性多少年?在這篇悲觀論調(diào)的文章里,讓我們先看看下面這個(gè)列表:

  1. Mozilla發(fā)布了自己JavaScript1.7或1.8,前者是在6年半之前發(fā)布的,且不向后兼容,但并無人使用且永遠(yuǎn)不會(huì)有,同樣也適用于后者。
  2. ECMAScript Harmony。最近,由于設(shè)計(jì)委員會(huì)的原因,發(fā)布新版ECMAScript將會(huì)有一個(gè)極其緩慢和痛苦的過渡過程,特別是它有一些特效是與JavaScript不兼容的。沒有解決方案,除非你愿意再等數(shù)十年。

下面列出一些可選項(xiàng)

  1. CoffeeScript語法非常漂亮且支持類。我認(rèn)為CoffeeScript并未結(jié)束,只不過是剛剛?cè)A麗地開啟。
  2. TypeScript一種編譯到JavaScript的語言,可以在JavaScript中構(gòu)建并且添加了靜態(tài)類型。個(gè)人而言,我是它的大粉絲。正如Mohamed Mansour和Dave Hodder在評(píng)論中指出的那樣,TypeScript正在進(jìn)一步實(shí)施ECMAScript的一些建議,也許ECMAScript最終會(huì)從TypeScript中借鑒可選的靜態(tài)類型。
  3. Google Dart一個(gè)全新的語言,附帶JavaScript編譯器和一些JavaScript互操作,但整體上并未整合到JavaScript生態(tài)系統(tǒng)中。
  4. HaXe這是一個(gè)高級(jí)語言,可以編譯JavaScript、Flash、NekoVM、PHP、C++、C#和Java(不久后),雖然我從未使用過,但它真的令人印象深刻。

總結(jié)

***,我敢押注,最終的獲勝者肯定是編譯為JavaScript的語言。雖然我們還沒真正準(zhǔn)備好這樣的過渡,但是所取得的進(jìn)展仍是有目共睹的。盡管也存在些偏離,但他們正在替未來的Web發(fā)展鋪平道路。不管最終哪門語言會(huì)勝出,我都想強(qiáng)調(diào)一下我的主要觀點(diǎn):JavaScript目前仍然存在許多不足,我們需要擁抱一個(gè)新語言并且推進(jìn)它。

責(zé)任編輯:冰凝兒
相關(guān)推薦

2024-11-28 10:09:06

2012-08-10 10:15:50

HTML5

2015-08-11 09:46:26

JavaScriptDOM編程重排

2014-03-11 23:10:35

JavaScriptJS

2011-05-25 14:23:55

Javascriptthis

2011-10-20 15:56:07

Dart

2021-05-14 00:00:15

JavaScript開發(fā)代碼

2011-05-25 10:03:00

JavaScriptwith

2015-07-20 16:41:16

MongoDBJavaScript

2014-01-03 09:13:39

JavaScriptthis

2012-12-18 10:03:22

JavaScriptWebJS

2009-07-14 14:12:14

Javascript

2009-06-09 22:07:24

Javascript缺

2018-01-03 13:06:13

JavaScript成本開發(fā)

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2021-04-07 10:12:05

Javascript對(duì)象拷貝開發(fā)

2013-04-07 09:57:45

CouchbaseMySQLNoSQL

2011-08-10 10:27:47

思杰XenServer 6

2009-06-09 21:54:26

傳遞參數(shù)JavaScript

2011-07-19 13:29:50

JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)