JavaScript核心以及實踐_第1頁
JavaScript核心以及實踐_第2頁
JavaScript核心以及實踐_第3頁
JavaScript核心以及實踐_第4頁
JavaScript核心以及實踐_第5頁
已閱讀5頁,還剩237頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JavaScript

核心以及實踐

目錄

第一章概述13

1.1JavaScript簡史13

1.1.1動態網頁13

1.1.2瀏覽器之戰14

1.1.3標準14

1.2JavaScript語言特性14

1.2.1動態性14

1.2.2弱類型15

1.2.3解釋與編譯16

1.3JavaScript應用范圍16

1.3.1客戶端JavaScript17

1.3.2月民務端JavaScript19

1.3.3其他應用中的JavaScript22

基礎部分26

第二章基本概念26

2.1數據類型26

2.1.1基本數據類型26

2.1.2對象類型27

2.1.3基本類型與對象間的轉換28

2.1.4類型的判斷30

2.2變量31

2.2.1基本類型和引用類型31

2.2.2變量的作用域32

2.3運算符33

2.3.1中括號運算符(口)33

2.3.2點運算符(.)34

2.3,3相等與等同運算符35

第三章對象與JSON38

3.1Javascript對象38

3.1.1對象的屬性38

3.1.2屬性與變量39

3.1.3原型對象及原型鏈40

3.1.4this指針42

3.2使用對象43

3.3JSON及其使用44

3245

第四章函數47

4.1函數對象47

4.1.1創建函數47

4.1.2函數的參數48

4.2函數作用域50

4.2.1詞法作用域50

4.2.2調用對象52

4.3函數上下文52

4.4call才IIapply53

4.5使用函數54

4.5.1賦值給一個變量54

4.5.2賦值為對象的屬性54

4.5.3作為參數傳遞55

4.5.4作為函數的返回值55

第五章數組57

5.1數組的特性57

5.2使用數組58

5.2.1數組的基本方法使用58

5.2.2刪除數組元素62

5.2.3遍歷數組64

第六章正則表達式65

6.1正則表達式基礎概念65

6.1.1元字符與特殊字符65

6.1.2范圍及重復66

6.1.3分組與引用68

6.2使用正則表達式69

6.2.1創建正則表達式69

6.2.2String中的正則表達式71

6.3實例:JSFil修r72

第七章閉包74

7.1閉包的特性74

7.2閉包的用途76

7.2.1匿名自執行函數76

7.2.2緩存77

7.2.3實現封裝77

7.3應該注意的問題79

7.3.1內存泄漏79

7.3.2上下文的引用79

第八章面向對象的Javascript81

8.1原型繼承81

8.1.1引用83

8.1.2new操作符84

8.2封裝85

8.3工具包Base86

4245

84實例:事件分發器89

第九章函數式的Javascript99

9.1匿名函數100

9.2高階函數100

9.2.1JavaScript中的高階函數100

9.2.2C語言中的高階函數102

9.2.3Java中的高階函數103

9.3閉包與柯里化104

9.3.1柯里化的概念1U5

9.3.2柯里化的應用105

9.4一些例子107

9.4.1函數式編程風格107

9.4.2Y-結合子109

9.4.3其他實例110

高級主題112

第十章核心概念深入112

10.1原型鏈112

10.1.1原型對象與原型鏈112

10.1.2構造器115

10.2執行期.1二下文117

10.3活動對象119

10.4作用域鏈120

10.5this值122

10.5.1詞法作用域122

10.5.2this的上下文123

第十一章客戶端的JavaScript125

11.1客戶端JavaScript執行環境125

11.2文檔對象模型(DOM)126

11.3事件驅動模型127

11.4與服務器端交互(Ajax)128

11.5調試130

11.5.1FireFox131

11.5.2Chrome134

11.6客戶端的MVC135

11.7Javascript/Ajax框架138

第十二章前端JavaScript框架:jQuery139

12.1jQuery簡介139

12.2jQuery基礎142

12.2.1jQuery選擇器142

12.2.2對DOM的操作143

12.2.3對CSS的操作146

12.2.4事件處理148

12.2.5實用函數149

12.3jQuery實例151

5245

第十三章JavaScript引擎155

13.1使用SpiderMonkey155

13.1.1SpiderMonkey簡介155

13.1.2JavaScript對象與C對象間的轉換關系156

13.1.3基本代碼模板157

13.1.4執吁JavaScript代碼160

13.1.5C程序調用JavaScript函數162

13.1.6JavaScript程序調用C函數163

13.1.7在C程序中定義JavaScript對象165

13.2SpiderMonkey的實現167

13.2.1虛擬機概述167

13.2.2SpiderMonkey體系結構168

13.2.3jsval類型168

13.2.4對象169

13.3V8引擎概覽169

13.3.1V8引擎基本概念169

13.3.2V8引擎使用示例170

13.3.3使用C++變量171

13.3.4調用C++函數173

13.3.5使用C++類174

第十四章Java應序中的JavaScript178

14.1腳本化基礎178

14.1.1腳本化框架178

14.2使用Rhino引擎179

14.2.1直接對腳本求值179

14.2.2傳遞Java對象179

14.2.3調用腳本內的函數181

14.2.4在腳本中使用Java資源183

14.2.5實現Java接口184

14.3實例:sTodo185

14.3.1sTodo簡介185

14.3.2sTodo的插件機制187

14.3.3sTodo中的腳本189

14.4實例:可編程計算器phoc191

14.4.1phoc簡介191

14.4.2phoc中的腳本193

第十五章服務器端的JavaScript197

15.1node.js197

15.1.1node.js簡介197

15.1.2node.js使用示例198

15.1.3node.js實例201

15.2CouchDB205

15.2.1CouchDB簡介205

15.2.1CouchDB使用207

6245

15.2.3CouchDB實例209

附錄——些JavaScript技巧217

創建對象217

訪問對象的屬性217

遍歷對象217

名稱空間218

附錄二使用graphviz繪圖221

graphviz簡介221

基礎知識222

第一個graphviz圖222

定義頂點和邊的樣式223

進一步修改頂點和邊樣式224

子圖的繪制225

數據結構的可視化226

一個hash表的數據結構226

繪制hash表的數據結構227

hash表的實例228

軟件模塊組成圖230

Apachehttpd模塊關系230

模塊組成關系231

狀態圖233

有限自動機示意圖233

OSGi中模塊的生命周期圖234

其他實例235

一棵簡單的抽象語法樹(AST)235

簡單的UML類圖236

狀態圖238

附錄239

附錄三ExtJs簡介及示例241

ExtJs簡介241

ExtJS示例242

7245

本書組織結構

>第一章,介紹JavaScript的歷史,語言特性及應用范圍,從大的視角來概述

JavaScripto

>第二章,介紹基本的JavaScript概念,這部分的概念十分重要,直接影響到后面章節

的內容的理解.

>第三章,對象,是JavaScript中最核心,也最容易被誤解的部分,所以抽出一個章

節來描述JavaScript的對象,涉及到JSON(JavaScriptObjectNotation),以

及一些如何使用JavaScript對象的實例。

>第四章,函數,是JavaScript中的另一個重要的概念,與大多數為人熟知的命令式

語言中的函數(方法)概念不一樣的是,JavaScript中的函數涉及到更復雜的形式,

比如匿名函數,閉包等。

>第五章,數組Array在JavaScript中是一個保留字,與其他語言不同的是,Array

更像是一個哈希表,而對Array的操作則可以類比為棧結構,或者Lisp中的List,

總之,數組是一個復雜的對象,值得我們花時間深入探究。

>第六章,正則表達式,正則表達式是一個偉大的發明,在很多的應用程序和程序設計語

言中都會出現它的身影,我們當然需要討論其在JavaScript中的使用。其中包括正

則表達式的規則及一些簡單的實例。

>第七章,閉包,是函數式編程語言所特有的一種結構,使用它可以是代碼更簡潔,有是

更是非它不可,但是,不小心的設計往往容易造成自存泄漏(特別是在IE瀏覽器的早

期版本中)。

>第八章,JavaScript作為一個語言,它本身又是“可編程”(programmable)的,你

可以使用你自己設想的任意方式來組建你的代碼,當然包括流行的00。本章的最后包

含一個事件分發器的實現,通過這個例子我們可以較好的掌握面向對象的JavaScript.,

>第九章,這一章,我們來探討JavaScript中的函數式編程的主題,如果有Lisp或

者Scheme之類的語言經驗,可以從某種程度上獲得共鳴。如果不了解其他的函數

式語言,則應該仔組讀這一章,對你的編程思想大有裨益。

>第十章,在前面的章節中,陸續而分散的討論過JavaScript語言中的一些核心概念如

對象,函數,作用域,閉包等等,但是不夠深入,這一章則進行更詳細的討論。

>第十一章,這一章主要討論客戶端JavaScript的一些基礎知識,以及一些好的編程實

踐,為后兩章做一個引子。

>第卜二章,討論前端JavaScript框架jQuery的基本概念及使用,最后是一個簡單

的實例:一個簡易的todo系統。

>第十三章,討論JavaScript引擎,主要包括FI前較為流行的三種引擎:Mozilla的

Spidermonkey,Google的V8,以及前Sun的rhino,其中剖析

SpiderMonkey的工作機制,V8及rhino僅演示一些基本的使用。

>第十四章,討論JavaScript在Java應用程序中的使用,實例部分介紹筆者開發的

待辦事項管理工具sTodo及可編程計算器phoc的設計及實現,以及其中如何

使用JavaScript引擎來完成腳本化。

>第十五章,討論JavaScript在服務器端的應用,分別討論了node.js及一個面向文

檔的數據庫系統CouchDB的基本使用。

9245

附錄一中討論了一些常用JavaScript技巧。

附錄二中討論了graphviz繪圖工具的使用,本書中大量的結構圖等圖例均采用

graphiviz繪制。

附錄三中為前端JavaScript框架ExtJS的簡單實例。

10245

如何使用本書

本書中前半部分中講解的大部分內容與客戶端的JavaScript沒有關系,如函數,對象,

數組,閉包等概念都屬于JavaScript內核本身,是與環境無關的,為了過早的陷入具體的

應用之中,筆者開發了一個簡單但可用的JavaScript:執行環境(JSEvaluator),核心采用

Mozilla的一個開源的JavaScript引擎Rhino.這個弓|擎為純Java實現,不包含任何

DOM元素,故可以較為輕便的運行書中的例子而不必糾纏與瀏覽器差異之類的問題中。

JSEvaluator是一個簡單的JavaScript的IDE.提供基本的代碼編輯功能,點擊運

行按鈕可以運行當前活動標簽中的腳本,結果將在JSEvaluator的控制臺中打印出來。

本書的后半部分,如第七章的事件分發器以及第九章的客戶端JavaScript,則需要在瀏覽

器中運行。具體的章節會有詳細說明。

程序設計是一門實踐的藝術,讀者在閱讀本書的同E寸,應該做一些練習,那樣才可能對

書本中的知識點有好的理解。建議讀者一邊閱讀,一邊將書中的例子在JSEvaluator中運

行,查看結果,并可以自己修改這些例子,以期得到更好的效果。

11245

第一章概述

1.1JavaScript簡史

在20世紀90年弋,也就是早期的WEB站點上,所有的網頁內容都是靜態的,所

謂靜態是指,除了點擊起鏈接,你無法通過任何方式同頁面進行交互,比如讓頁面元素接受

事件,修改字體等。人們于是迫切的需要一種方式來打破這個局限,于是到了1996年,網

景(Netscape)公司開始研發一種新的語言Mocha,并將其嵌入到自己的瀏覽器

Netscape中,這種語言可以通過操縱DOM(DocumentObjectModel,文檔對象模型)來

修改頁面,并加入了對鼠標事件的支持。Mocha使用了C的語法,但是設計思想上主要

從函數式語言Scheme那里取得了靈感。當Netscape2發布的時候,Mocha被改名為

LiveScript,當時可能是想讓LiveScript為WEB頁面注入更多的活力。后來,考志到這

個腳本語言的推廣,網景采取了一種宣傳策略,將LiveScript更名為JavaScript,目的

是為了跟當時非常流行的面向對象語言Java發生曖聯的關系。這種策略顯然頗具成效,以

至于到現在很多初學者還會為JavaScript和Java的關系而感到困惑。

JavaScript取得成功了之后,確實為頁面注入了活力,微軟也緊接著開發自己的瀏覽

器腳本語言,一個是基于BASIC語言的VBScript,另一個是跟JavaScript非常類似的

Jscript,但是由于JavaScript已經深入人心,所以在隨后的版本中,微軟的IE幾乎是將

JavaScript作為一個標準來實現。當然,兩者仍然有不兼容的地方。1996年后期,網景

向歐洲電腦廠商協會(ECMA)提交了JavaScript的設計,以申請標準化,ECMA去掉了其

中的一些實現,并提出了ECMA-262標準,并確定JavaScript的正式名字為ECMAScript,

但是JavaScript的名宇已經深入人心,故本書中仍沿用JavaScript這個名宇。

1.L1動態網頁

WEB頁面在剛開始的時候,是不能動態修改其內容的,要改變一個頁面的內容,需要

先對網站上的靜態HTML文件進行修改,然后需要刷新瀏覽器。后來出現的JSP,ASP等

服務器端語言可以為頁面泥供動態的內容,但是如果沒有JavaScript則無法在服務器返回

之后動態的在前端修改頁面,也無法有諸如鼠標移上某頁面元素則高亮該元素之類的效果,

因此JavaScript的出現大大的豐富了頁面的表現,提高了用戶體驗。

而當AJAX流行起來之后,更多的非常絢麗的WEB應用涌現了,而且呈越來越多的趨勢,

如Gmail,GoogleMap,GoogleReader,Rememberthemilk,facebook等等優

秀的WEB2.0應用,都大量的使用了JavaScript以及基于JavaScript技術的AJAX。

這些優秀的Web2.0應用提供動態的內容,客戶端可以局部更新頁面上的視覺元素,比如

對地圖的放大/縮小,新郵件到來后的提醒等等。用戶體驗較靜態頁面得到了很大的提升。

事實上,后期的很多應用均建立在B/S架構上,因為HTML構筑UI的成本較桌面開

發為低。因此基于Web的應用開始占有一定的份額,正在逐步替換C/S架構的桌面應用。

動態網頁的好處在于,客戶端的負載較小,只需要?個瀏覽器即可,主要的負擔在服務

器端,這就節約了客戶端的開發成本。

13/245

1.L2瀏覽器之戰

1994年網景公司成立,并推出了自己的瀏覽器的免費版本Netscape,很快就占有

了瀏覽器市場。到了1995年,微軟公司開始加入,并很快發布了自己的

InternetExplorer1.0。在隨后的兒年間,網景和微軟公司不停的發布新版本的瀏覽器,

支持更多的新功能。很快,這兩者的目標就不是如何做好瀏覽器,而是在對手擅長的方面

壓制對方。比如,網景的瀏覽器Netscape標榜速度快,IE就要開發出比網景更快的瀏

覽器,而對自身的安全漏洞,渲染能力等方面放任自流。這樣純粹為了競爭而競爭,無疑對

廣大的用戶來說是非常不利的事情。但是一直到1997年,網景的瀏覽器Netscape份

額大概在72%,而IE只占至I」18%。

但是,IE在隨后的版本IE4.0的時候開始支持W3C的標準,并且在網頁的動態性

方面加入了很大的支持。事實上,這時候的網景已經不敵慢慢崛起的微軟帝國了,微軟利用

自己的操作系統Windows,在其中捆綁了IE瀏覽器,而且完全免費。這樣,IE的市

場占有率開始抽過Netscape。當出現一家獨大的場面之后,標準化就顯得步履維艱了,

開發人員開始只為IE瀏覽器編寫代碼,因為不需要在其他任何瀏覽器上運行,因此所有

的網頁都很可能只能在IE下運行,或者只能在IE下效果才可以得到保證。

1998年,網景的Netscape開放了源碼,分散在世界各地的開發人員開始貢獻代碼

和不定,使得這個瀏覽器變得越來越出色,到了2004年,Firefox,作為這個項目中的

一個產品,推出了1.0版本。這個以Mozilla為基礎的瀏覽器才慢慢開始發展。一方面,

捆綁在windowsxp系統中的IE6.0中漏洞百出,大量的蠕蟲病毒都會攻擊IE瀏覽器,

而Firefox則沒有這方面的問題,安全且高效。因此從2006年到2008年,Firefox

的市場占有率開始回升,IE的平均占有率大約為85%,Firefox平均占有率為15%。

而某些地區,如在歐洲,Firefox的占有率高達20%。

到了2009年,由于反壟斷法即開源項目的影響,windows7不再捆綁IE瀏黃器,

這樣,用戶可以有權利選擇自己需要的瀏覽器,但這并不意味著Firefox勝出,IE落敗。

事實上,這更促進了其他的瀏覽器如Safari,Opera,Chrome的發展。

1.1.3標準

1.2JavaScript語言特性

JavaScript是一門動態的,弱類型,基于原型的腳本語言。在JavaScript中“一切皆

對象”,在這一方面,它比其他的00語言來的更為徹底,即使作為代碼本身載體的function,

也是對象,數據與代碼的界限在JavaScript中已經相當模糊。雖然它被廣泛的應用在WEB

客戶端,但是其應用范圍近遠未局限于此。下面就這幾人特點分別介紹:

1.2.1動態性

動態性是指,在一個JavaScript對象中,要為一個屬性賦值,我們不必事先創建一個字段,

只需要在使用的時候做賦直操作即可,如下例:

14245

〃定義一個對象

varobj=newObject();

//動態創建屬性name

="anobject";

//動態創建屬性sayHi

obj.sayHi=function(){

returnMHin;]_

obj.sayHi();

假如我們使用Java語言,代碼可能會是這樣:

class

Obj{String

(lame;

FunctionsayHi;

publicObj(Stingname,Function

sayHi){=name;

this.sayHi=sayHi;}

)

Objobj=newObj("anobject",newFunction());

動態性是非常有用的,這個我們在第三章會詳細講解。

1.2.2弱類型

與Java,C/C++不同,JavaScript是弱類型的,它的數據類型無需在聲明時指定,解釋

器會根據上下文對變量進行實例化,比如:

//定義一個變量s,并賦值為字符串

vars="text'1;

print(s);

//賦值s為整型

s-12+5;

print(s);

15245

//賦值S為浮點型

s=6.3;

print(s);

//賦值s為一個對象

s=newObject();

s.name="object1';

print-(s.namp);

結果為:

text

17

6.3

Object

可見,JavaScript的變量更像是一個容器,類似與Java語言中的頂層對象Object,它

可以是任何類型,解釋器會根據上下文自動時其造型。

弱類型的好處在于,一個變量可以很大程度的進行復用,比如String類型的name

字段,在被使用后,可以賦值為另一個Number型的對象,而無需重新創建一個新的變

量。不過,弱類型也有其不利的一面,比如在開發面向對象的JavaScript的時候,沒有

類型的判斷將會是比較麻煩的問題,不過我們可以通過別的途徑來解決此問題。

1.2.3解釋與編譯

通常來說,JavaScript是一門解釋型的語言,特別是在瀏覽器中的JavaScript,所

有的主流瀏覽器都將JavaScript作為一個解釋型的腳本來進行解析,然而,這并非定則,

在Java版的JavaScript解釋器rhino中,腳本是可以被編譯為Java字節碼的。

Google的V8引擎則直接將JavaScript代碼編譯為本地代碼,無需解釋。

解釋型的語言有一定的好處,即可以隨時修改代碼,無需編譯,刷新頁面即可重新解釋,

可以實時看到程序的結果,但是由于每?次都需要解釋,程序的開俏較大:而編譯型的潛言

則僅需要編譯一次,每次都運行編譯過的代碼即可,但是又喪失了動態性。

我們將在第九章和第十章對兩種方式進行更深入的討論。

1.3JavaScript應用范圍

當JavaScript第一次出現的時候,是為了給頁面帶來更多的動態,使得用戶可以與

頁面進行交互為目的的,雖然JavaScript在WEB客戶端取得了很大的成功,但是

ECMA標準并沒有局限其應用范圍。事實上,現在的JavaScript大多運行與客戶端,

但是仍有部分運行于服%器端,如Servlet,ASP等,當然,JavaScript作為一個獨立

的語言,同樣可以運行在其他的應用程序中,比如Java版的JavaScript引擎

Rhino,C語言版的

16245

SpiderMonkey等,使用這些引擎,可以將JavaScript應用在任何應用之中。

131客戶端JavaScript

客戶端的JavaScript隨著AJAX技術的復興,越來越凸顯了JavaScript的特點,

也有越來越多的開發人員開始進行JavaScript的學習,使用JavaScript,你可以使你的

WEB頁面更加生動,通過AJAX,無刷新的更新頁面內容,可以大大的提高用戶體驗,隨

著大量的JavaScript包如jQucry,ExtJS,Mootools等的涌現,越來越多的絢麗,

高體驗的WEB應用被開發出來,這些都離不來幕后的JavaScript的支持。

?Previous<PlaybackStopPlay>Next>>

圖JavaScript實現的一個WEB幻燈片

瀏覽器中的JavaScript引擎也進行了長足的發展,比如FireFox3,當時一個宣傳

的重點就是速度比IE要快,這個速度一方面體現在頁面渲染上,另一方面則體現

在JavaScript引擎上,而Google的Chrome的JavaScript引擎V8更是將速度

發展到了極致。很難想象,如果沒有JavaScript,如今的大量的網站和WEB應用會成為

什么樣子。

我們可以看兒個例子,來說明客戶端的JavaScript的應用程度:

17245

圖ExtJS實現的一個網絡相冊,ExtJS是一個非常優秀的JavaScript庫

圖ExtJS實現的一個表格,具有排序,編輯等功能

當然,客戶端的JavaScript各有側重,jQuery以功能見長,通過選擇器,可以完成

80%的頁面開發工作,并且提供強大的插件機制,下圖為jQuery的UI插件:

18245

Resizable

Selectable

SortableDate:

Widgets

Accordion

Datepicker

Dialog

Progressbar

SUder

Tabs

Effects

總之,隨著Ajax的復興,客戶端的JavaScript得到了很大的發展,網絡上流行著

大量的優秀的JavaScript庫,現在有一個感性的認識即可,我們在后邊的章節會擇其尤

要涓進行詳細討論。

1.3.2服務端JavaScript

相對客戶端而言,服務器端的JavaScript相對平淡很多,但是隨著JavaScript被更

多的開發人員重視,JavaScript在服務器端也開始迅速的發展起來,Helma,Apache

Sling等等。在服務器端的JavaScript比客戶端少了許多限制,如本地文件的訪問,網絡,

數據庫等。

一個比較有意思的服務端JavaScript的例子是Aptana的Jaxer,Jaxer是一個

服務器端的Ajax框架,我們可以看這樣一個例子(例子來源于jQuery的設計與實現這

JohnResig):

<html>

<head>

<scriptsrc=nhttp://code./jquery.js*'

runat="both"x/script>

(scripts

jQuery(function($){

$("formn).submit(function(){s

ave($("textarea").val());

returnfalse;

));

});

</script>

<scriptrunat=,'servern>

functionsave(text){

19/245

Jaxer.File.write(Htmp.txt",text);}

xy=true;

function

load(){$(*'textarea

“).val(

Jaxer.File.exists("tmp.txt")?Jaxer.File.read(ntmp.txt"):11");}

</script>

</head>

<bodyonserverload=,'load()',>

<formaction=HHmethod="postH>

<textarea></textarea>

<inputtype="submitH/>

</form>

</body>

</html>

runat屬性說明腳本運行在客戶端還是服務器端,client表示運行在客戶端,server

表示運行在服務器端,而both表示可以運行在客戶端和服務器端,這個腳本可以訪問文件,

并將文件加載到一個textarea的DOM元素中,還可以將textarea的內容通過Form

表單提交給服務器并保存。

再來看另一個例子,通過Jaxer對數據庫進行訪問:

<scriptrunat=',server,*>

varrs=Jaxer.DB.execute(''SELECT*FROMtable*1);

varfield=rs.rows[0].field;

</script>

通過動態,靈活的語法,再加上對原生的資源(如數據庫,文件,網絡等)操作的支持,服務

器端的JavaScript應用將會越來越廣泛。

當Google的JavaScript引擎V8出現以后,芍很多基于V8引擎的應用也出現了,

其中最著名,最有前景的當算Node.js了,下面我們來看一下Node.js的例子:

varsys=require('sys'),

http=require('http1);

http.createServer(function(req,res)

{setTimeout(function(){

res.sendHeader(230,{'Content-Type1:'text/plain1));

res.sendBody(1HelloWorld');

res.finish();

),2000);

20245

}).listen(8000);

sys.puts('Serverrunningat:8000/');

保存這個腳本為sayHelLo.js,然后運行:

nodesayHello.js

程序將會在控制臺上打印:

Serverrunningathttp://:8000/

訪問httD:〃:8000,兩秒鐘之后頁面會響應:Hello,World。

再來看另一個官方提供的例子:

vartcp=require(*tcp*);

varserver=tcp.createServer(function(socket)

{socket.setEncoding("utf8");

socket.addListener("connect",function(){

socket.send(,,helLo\r\n^,);

!);

socket.addListener("receive",function(data)

{socket.send(data);

!);

socket.addListener("eof",function()

{socket.send(,,goodbye\r\nu);

socket.close();

});

});

server.listen(7000,"localhost");

訪問localhost的7000端口,將建立一個TCP連接,編碼方式為utf-8,當客戶端連

接到來時,程序在控制臺上打印

hello

當接收到新的數據時,會將接收到的數據原樣返回給客戶端,如果客戶端斷開連接,則向控

制臺打印:

goodbay

21245

Node提供了豐富的API來簡化服務器端的網絡編程,由于Node是基于一個

JavaScript引擎的,因此天生的就具有動態性和可擴展性,因此在開發網絡程序上,確實

是一個不錯的選擇。

133其他應用中的JavaScript

通過使用JavaScript的引擎的獨立實現,比如Rhino,SpliderMonkey,V8等,可

以將JavaScript應用到幾乎所有的領域,比如應用程序的插件機制,高級的配置文件分析,

用戶可定制功能的應用,以及一些類似與瀏覽器場景的比如Mozilla的ThunderBrid,

Mozilla的UI框架XUL,筆者開發的一個Todo管理器sTodo(在第十五章詳細討論)等。

圖sTodo一個使用JavaScript來提供插件機制的Java桌面應用

Java版的JavaScript引擎原生的可以通過使用Java對象,那樣將會大大提高

JavaScript的應用范圍,如數據庫操作,服務器內部數據處理等。當然,JavaScript這

種動態語言,在UI方面的應用最為廣泛。

著名的Adobereader也支持JavaScript擴展,并提供JavaScript的API來訪

問PDF文檔內容,可以通過JavaScript來定制AdobeReader的界面以及功能等。

app.addMenuItem({

cName:"一”,

22/245

//menudivider

eParent:"View",

//appendtotheViewmenu

cExec:"void(0);11

});

app.addMenuItem({

cName:"BookmarkThisPage&5”,

eParent:"View",

cExec:"AddBookmark.();",

cEnable:Hevent.rc=(event.target!=

null)));

app.addMenuItem({

cName:"GoToBookmark&6”,

eParent:"View”,

cExec:"ShowBookmarks();"z

cEnable:''event.rc=(event.target!=

null)));

app.addMenuItem({

cName:"RemoveaBookmark,',

eParent:"View",

cExec:"DropBookmark();,

cEnable:"event.rc=(event.target!=

null);"));

app.addMenuItem({

cName:"ClearBookmarks'1,

eParent:"View",

cExec:"ClearBookmarks();",

cEnable:nevent.rc=

true;"});

為AdobeReader添加了4個菜單項,如圖:

23245

菜單欄的)F9

3工具欄①

?導覽面板時

3線條粗細⑥Ctrl+5

追蹤器的…

自動滾動COShift-KLtrl-HH

朗讀?

BookmarkThisPage5

GoToBookmark6

RemoveaBookmark

ClearBookmarks

UltraEdit編輯器在新的版本中也加入了對腳本化的支持,使用的腳本語言上是

JavaScript,用戶可以通過腳本來控制編輯器的一些公開對象,下面是一個簡單的實例:

hello.jsx

iiiiIiiiiL。,iiiI■?a???|??????|■■????I??■?

IB(function(){

2UltraEdit.activeDocument.write("hello,world");

3-})();

UltraEdit.activeDocument表示當前活動文檔,write方法會將字符串寫入當前活動文檔

的緩沖區,運行這個腳本,可以得到下面的效果:

當然,這里僅是一個簡單實例,關于UltraEdit腳本化的詳細信息請參考UltraEdit的幫

助文件或相關文檔。

另一個比較有意思的JavaScript實例為一個在線的遺傳算法的演示,給定一個圖片,

然后將一些多邊形(各種顏色)拼成一個圖片,拼圖的規則為使用遺傳算法,使得這些多變形

組成的圖片與FI標圖片最為相似:

24245

■50polygons(6-vertex)

■4,358benefitialmutations

■227,852candidates

■9597%fitness

■ThankstoQuialiss.

■Imagesfromdifferentruns.

-50polygons(6-vertex)

■718+benefitialmutations

■22.440+candidates

■95.24%fitness

■Imagesfromdifferentruns

■100polygons(5-vertex)

■10,490benefitialmutations

■2,161,018candidates

■95.03%fitness

■ThankstoAsaWill.Nic&Yuku

■Imagesfromdifferentruns

可見,JavaScript在其他方面的也得到了廣泛的應用。

25245

基礎部分

本部分開始正式進入JavaScript內核部分,包括JavaScript的對象,函數,數組,

閉包,其中各個主題中會詳細涉及到很多相關的,容易被誤解的知識點,比如對象中的屬性

概念,函數中的匿名函數,作用域鏈.卜下文.運行環境,JavaScript數如與其他語言數

組的區別以及其強大之處等等。

本部分為隨后內容的基礎,需要完全掌握,則對隨后的內容可以更好的理解。此部分雖

名為基礎部分,實則不包含JavaScript的基本語法,如流控制語句,變量的聲明等內容,

這些部分比較基礎,和其他的編程語言相差不大,如果需要可以參閱其他書籍,同時,在本

部分的例子中會穿插一些基本的語法知識,如果曾經學過C語言或者其他任何程序設計語

言都不會有閱讀障礙。

第二

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論