天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

還原JavaScript的真實(shí)歷史

  本文發(fā)布于2007-12-13

  問(wèn)題

  JavaScript真的繼承自Cmm嗎?

  JavaScript與Java有多少關(guān)系?

  JavaScirpt最初的設(shè)計(jì)是怎樣的?

  在許多資料,JavaScript的語(yǔ)源被追溯到一種名為Cmm的語(yǔ)言。同樣是在這一溯源的過(guò)程中,人們發(fā)現(xiàn)“其實(shí)”JavaScript不是第一種網(wǎng)頁(yè)中的腳本語(yǔ)言。現(xiàn)在一些所謂“公認(rèn)”的情況是這樣的:

  大概在1992年,一家稱作Nombas的公司開始開發(fā)一種叫做C減減(C-minus-minus,簡(jiǎn)稱Cmm)的嵌入式腳本語(yǔ)言。這個(gè)腳本語(yǔ)言捆綁在一個(gè)叫做CEnvi的共享軟件產(chǎn)品中,當(dāng)NETscape Navigator嶄露頭角時(shí),Nombas開發(fā)了一個(gè)可以嵌入網(wǎng)頁(yè)中的CEnvi的版本。這些早期的試驗(yàn)稱為Espresso Page(濃咖啡般的頁(yè)面),它們代表了第一個(gè)在萬(wàn)維網(wǎng)上使用的客戶端腳本語(yǔ)言。而Nombas絲毫沒(méi)有料到它的理念將會(huì)成為因特網(wǎng)的一塊重要基石。

  然而,這是真實(shí)的情況嗎?運(yùn)行在NETscape中的第一個(gè)“客戶端腳本語(yǔ)言”真的是Cmm的濃咖啡?

  又或者真的象Wiki中記述的那樣,Brendan Eich在JavaScript引用了Cmm語(yǔ)言特性?

  不是的。盡管上述的資料看起來(lái)出自權(quán)威:《Javascript高級(jí)程序設(shè)計(jì)》(Professional JavaScript for Web Developers),但他的確錯(cuò)了。

  JavaScript與Cmm在語(yǔ)言特性上無(wú)關(guān)

  為了弄明白JavaScript與Cmm的關(guān)系,我大概用了三天的時(shí)間,從網(wǎng)上收集了多個(gè)Cmm的版本。這些版本既包括早期的Cmm(1993年),也包括在JavaScript初創(chuàng)時(shí)的Cmm(1995年),還包括在后來(lái),Cmm更名為ScriptEase的第一個(gè)版本(3.0, 1997年),作為參考,我還考察了它在服務(wù)器端的版本。

  遺憾的是,在1996年之前,在Cmm的2.x的最后一個(gè)版本之前,Cmm都并不是一個(gè)面向?qū)ο螅ɑ蚧趯?duì)象)的語(yǔ)言,Cmm正如它自己的名字所說(shuō)的一樣:是一個(gè)精減版的C,而不是C++或以C++為基礎(chǔ)的變種。所以Cmm中有“結(jié)構(gòu)”,也有#include等,整個(gè)的體系是參考C語(yǔ)言的。

  由于JavaScript在基本的語(yǔ)法特性(例如大括號(hào)、語(yǔ)句關(guān)鍵字等)上參考了C,在對(duì)象系統(tǒng)上(例如“.”作為成員存取)上參考了Java,因此在一定程度上Cmm與JavaScript存在相似性——主要是與共同借鑒自C的部分。但是除了這些之外,JavaScript與Cmm在語(yǔ)言特性上完全無(wú)關(guān)。

  JavaScript最初的基本設(shè)計(jì)是怎樣的?

  我需要補(bǔ)充一下JavaScript初始設(shè)計(jì)目標(biāo)。Brendan Eich在1995年4月前后被NETscape公司雇傭,目標(biāo)是完成一套語(yǔ)言系統(tǒng)。最初的設(shè)計(jì)里,該語(yǔ)言系統(tǒng)是為NETscape的LiveWire戰(zhàn)略服務(wù)的。該戰(zhàn)略彰顯了NETscape當(dāng)年的勃勃野心,它是NETscape公司的一個(gè)通用的Web開發(fā)環(huán)境,包括NETscape Enterprise、FastTrack Server等。LiveWire架構(gòu)也成為所有Web服務(wù)器提供SP(Server Page)技術(shù)的藍(lán)本。例如在IIS中的ASP,以及更早期的IDC(InterNET Database Connect)。

  這種技術(shù)在服務(wù)器端通過(guò)內(nèi)嵌于網(wǎng)頁(yè)的LiveScript代碼,使用名為database、DbPool、Cursor等的一組對(duì)象來(lái)存取LiveWire Database。作為整套的解決方案,NETscape在客戶端網(wǎng)頁(yè)上也提供LiveScript腳本語(yǔ)言的支持,除了訪問(wèn)Array、String等這些內(nèi)置對(duì)象之外,也可以訪問(wèn)window等瀏覽器對(duì)象。

  不過(guò)并不清楚的是:LiveScript最初的設(shè)計(jì)是先考慮服務(wù)器應(yīng)用,還是先考慮網(wǎng)頁(yè)中應(yīng)用。但這些應(yīng)用環(huán)境的決策上的變化,時(shí)間僅僅限制在1995年4月至1995年10月之前,因?yàn)楫?dāng)月發(fā)布的NETscape 2. 0 beta1已經(jīng)包含了腳本支持。

  在NETscape 2.0 beta1中并不支持<script>標(biāo)簽,而只是在form表單元素中支持了onclick這類的事件。這時(shí)的腳本代碼是用在HTML標(biāo)簽屬性上的,也就是類似于:<input type="button">

  很快,三周之后NETscape就發(fā)布了beta2。這個(gè)版本正式地支持了<script>標(biāo)簽,并可以解析該標(biāo)簽中的代碼、標(biāo)識(shí)符,開始具備調(diào)用函數(shù)、表達(dá)式運(yùn)算等能力。這個(gè)版本已經(jīng)具備了JavaScript 1.0的基本性質(zhì)。

  ——什么?能調(diào)用函數(shù)、表達(dá)式運(yùn)算就是JavaScript 1.0的基本性質(zhì)了?

  是的,差不多了。相比起來(lái),JavaScript 1.0只是在這樣的基礎(chǔ)上加上了一套對(duì)象系統(tǒng)而已。在隨后發(fā)布的beta 3中,函數(shù)可以作為構(gòu)造器使用,可以創(chuàng)建出用戶自己的對(duì)象來(lái)了。再后來(lái)window等全局對(duì)象被加了進(jìn)來(lái),再把“當(dāng)前網(wǎng)頁(yè)”中的表單元素等影射成可編程對(duì)象,JavaScript 1.0就完成了。

  僅僅如此而已。在JavaScript 1.0的時(shí)代,既沒(méi)有“原型繼承”,也沒(méi)有“函數(shù)式編程”——甚至連匿名函數(shù)也沒(méi)有支持,所以下面的代碼就足夠讓瀏覽器掛掉了:

var func = function() {} 

it知識(shí)庫(kù)還原JavaScript的真實(shí)歷史,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 热の中文 AV天堂 | 99精品视频在线观看免费播放 | 贵妇局长的蕾丝乳罩 | 强奷乱码欧妇女中文字幕熟女 | 肉肉描写很细致的黄文 | 香蕉久久夜色精品国产小优 | 国产激情视频在线观看 | 亚洲综合小说久久另类区 | 久久九九精品国产自在现线拍 | 欧美牲交视频免费观看K8经典 | WWW国产亚洲精品久久麻豆 | 97在线看视频福利免费 | 4455永久在线毛片观看 | 国产99精品视频一区二区三区 | 欧洲videosdesrxotv| 亚洲国产成人精品无码区APP | 婷婷久久无码欧美人妻 | 欧美亚洲精品一区二三区8V | 国产精品亚洲精品久久品 | 国产AV亚洲精品久久久久软件 | 亚洲精品视频在线免费 | 99视频在线国产 | 美女张开腿让男人桶爽无弹窗 | 久久视频在线视频观看天天看视频 | 超碰高清熟女一区二区 | A级毛片无码久久精品免费 a级毛片黄免费a级毛片 | 欧美一区二区视频高清专区 | 久久精品视频uu | 婷婷亚洲AV色香蕉蜜桃 | 伊人天天躁夜夜躁狠狠 | 国自产拍 高清精品 | 日韩欧美精品有码在线播放免费 | 国产成年人在线观看 | 真人做受120分钟免费看 | 久久久久久亚洲精品影院 | 日本激情在线 | 年轻的女教师2017韩国在线看 | AV国产乱码一区二区三视频 | 精品无人区麻豆乱码1区2 | 亚洲欧美日韩另类精品一区二区三区 | 在线超碰免费视频观看 |