這一套JavaScript教程分九個章節從什麼是JavaScript、JavaScript的簡單應用一直介紹到如何用JavaScript實現複雜的交互,對於JavaScript初學者和進階者來說,都是一部不可多得的優秀教程。
JavaScript教程語言概況
(李曉華 2001年04月29日 01:50)
Internet時代,造就了我們新的工作和生活方式,其互聯性、開放性和共享信息的模式,打破了傳統信息傳播方式的重重壁壘,爲我們帶來了新的機遇。隨着計算機和信息時代的到來,人類社會前進的腳步在逐漸加快,每一天都有新的事情發生,每一天都在創造着奇蹟。隨着Internet技術的突飛猛進,各行各業都在加入Internet的行業中來。無論從管理方面,還是從商業角度來看,Internet都可以帶來無限生機。通過Internet,可以實現地區、集體乃至個人的連接,從而達到一種“統一的和諧”。那麼怎樣把自己的或公司的信息資源加入到WWW 服務器,是廣大用戶日益關心的問題。採用超鏈技術(超文本和超媒體技術)是實現這個目標最簡單的、最快速的手段和途徑。具體實現這種手段的支持環境,那就是HTML超文本標識語言。通過它們可製作所需的Web網頁。
通過超文本(Hyper Text)和超媒體(Hyper Media)技術結合超鏈接(Hyper link)的鏈接功能將各種信息組織成網絡結構(web),構成網絡文檔(Document),實現Internet上的“漫遊”。通過HTML符號的描述就可以實現文字、表格、聲音、圖像、動畫等多媒體信息的檢索。
然而採用這種超鏈技術存在有一定的缺陷,那就是它只能提供一種靜態的信息資源,缺少動態的客戶端與服務器端的交互。雖然可通過CGI(Common Gateway Interface)通用網關接口實現一定的交互,但由於該方法編程較爲複雜,因而在一段時間防礙了Internet技術的發展。而JavaScript的出現,無凝爲Internet網上用戶帶來了一線生機。可以這樣說,JavaScript的出現是時代的需求,是當今的信息時代造就了JavaScript。
JavaScript的出現,它可以使得信息和用戶之間不僅只是一種顯示和瀏覽的關係,而是實現了一種實時的、動態的、可交式的表達能力。從而基於CGI靜態的HTML頁面將被可提供動態實時信息,並對客戶操作進行反應的Web頁面的取代。JavaScript腳本正是滿足這種需求而產生的語言。它深受廣泛用戶的喜愛的歡迎。它是衆多腳本語言中較爲優秀的一種,它與WWW的結合有效地實現了網絡計算和網絡計算機的藍圖。無凝Java家族將佔領Internet網絡的主導地位。因此,儘快掌握JavaScript腳本語言編程方法是我國廣大用戶日益關心的。
一、什麼是JavaScript
JavaScript是一種基於對象(Object)和事件驅動(Event Driven)並具有安全性能的腳本語言。使用它的目的是與HTML超文本標記語言、Java 腳本語言(Java小程序)一起實現在一個Web頁面中鏈接多個對象,與Web客戶交互作用。從而可以開發客戶端的應用程序等。它是通過嵌入或調入在標準的HTML語言中實現的。它的出現彌補了HTML語言的缺陷,它是Java與HTML折衷的選擇,具有以下幾個基本特點:
腳本編寫語言
JavaScript是一種腳本語言,它採用小程序段的方式實現編程。像其它腳本語言一樣,JavaScript同樣已是一種解釋性語言,它提供了一個易的開發過程。
它的基本結構形式與C、C++、VB、Delphi十分類似。但它不像這些語言一樣,需要先編譯,而是在程序運行過程中被逐行地解釋。它與HTML標識結合在一起,從而方便用戶的使用操作。
基於對象的語言
JavaScript是一種基於對象的語言,同時以可以看作一種面向對象的。這意味着它能運用自己已經創建的對象。因此,許多功能可以來自於腳本環境中對象的方法與腳本的相互作用。
簡單性
JavaScript的簡單性主要體現在:首先它是一種基於Java基本語句和控制流之上的簡單而緊湊的設計, 從而對於學習Java是一種非常好的過渡。其次它的變量類型是採用弱類型,並未使用嚴格的數據類型。
安全性
JavaScript是一種安全性語言,它不允許訪問本地的硬盤,並不能將數據存入到服務器上,不允許對網絡文檔進行修改和刪除,只能通過瀏覽器實現信息瀏覽或動態交互。從而有效地防止數據的丟失。
動態性
JavaScript是動態的,它可以直接對用戶或客戶輸入做出響應,無須經過Web服務程序。它對用戶的反映響應,是採用以事件驅動的方式進行的。所謂事件驅動,就是指在主頁(Home Page)中執行了某種操作所產生的動作,就稱爲“事件”(Event)。比如按下鼠標、移動窗口、選擇菜單等都可以視爲事件。當事件發生後,可能會引起相應的事件響應。
跨平臺性
JavaScript是依賴於瀏覽器本身,與操作環境無關,只要能運行瀏覽器的計算機,並支持JavaScript的瀏覽器就可正確執行。從而實現了“編寫一次,走遍天下”的夢想。
實際上JavaScript最傑出之處在於可以用很小的程序做大量的事。無須有高性能的電腦,軟件僅需一個字處理軟件及一瀏覽器,無須WEB服務器通道,通過自己的電腦即可完成所有的事情。
綜合所述JavaScript 是一種新的描述語言,它可以被箝入到 HTML 的文件之中。 JavaScript語言可以做到迴應使用者的需求事件 (如: form 的輸入) ,而不用任何的網路來回傳輸資料,所以當一位使用者輸入一項資料時,它不用經過傳給伺服端 (server)處理,再傳回來的過程,而直接可以被客戶端 (client) 的應用程式所處理。
JavaScript 和 Java 很類似,但到底並不一樣! Java 是一種比 JavaScript 更復雜許多的程式語言,而 JavaScript 則是相當容易瞭解的語言。JavaScript 創作者可以不那麼注重程式技巧,所以許多 Java 的特性在 Java Script 中並不支援。
二、JavaScript和Java的區別
雖然JavaScript與Java有緊密的聯繫,但卻是兩個公司開發的不同的兩個產品。Java是SUN公司推出的新一代面向對象的程序設計語言,特別適合於Internet應用程序開發;而JavaScript是Netscape公司的產品,其目的是爲了擴展Netscape Navigator功能,而開發的一種可以嵌入Web頁面中的基於對象和事件驅動的解釋性語言,它的前身是Live Script;而Java的前身是Oak語言。下面對兩種語言間的異同作如下比較:
基於對象和麪向對象
Java是一種真正的面向對象的語言,即使是開發簡單的程序,必須設計對象。
JavaScript是種腳本語言,它可以用來製作與網絡無關的,與用戶交互作用的複雜軟件。它是一種基於對象(Object Based)和事件驅動(Event Driver)的編程語言。因而它本身提供了非常豐富的內部對象供設計人員使用。
解釋和編譯
兩種語言在其瀏覽器中所執行的方式不一樣。Java的源代碼在傳遞到客戶端執行之前,必須經過編譯,因而客戶端上必須具有相應平臺上的仿真器或解釋器,它可以通過編譯器或解釋器實現獨立於某個特定的平臺編譯代碼的束縛。
JavaScript是一種解釋性編程語言,其源代碼在發往客戶端執行之前不需經過編譯,而是將文本格式的字符代碼發送給客戶編由瀏覽器解釋執行。
強變量和弱變量
兩種語言所採取的變量是不一樣的。
Java採用強類型變量檢查,即所有變量在編譯之前必須作聲明。如:
Integer x;
String y;
x=1234;
x=4321;
其中X=1234說明是一個整數,Y=4321說明是一個字符串。
JavaScript中變量聲明,採用其弱類型。即變量在使用前不需作聲明,而是解釋器在運行時檢查其數據類型,如:
x=1234;
y="4321";
前者說明x爲其數值型變量,而後者說明y爲字符型變量。
代碼格式不一樣
Java是一種與HTML無關的格式,必須通過像HTML中引用外媒體那麼進行裝載,其代碼以字節代碼的形式保存在獨立的文檔中。
JavaScript的代碼是一種文本字符格式,可以直接嵌入HTML文檔中,並且可動態裝載。編寫HTML文檔就像編輯文本文件一樣方便。
嵌入方式不一樣
在HTML文檔中,兩種編程語言的標識不同,JavaScript使用<Script>...</Script>來標識,而Java使用<applet>...</applet>來標識。
靜態聯編和動態聯編
Java採用靜態聯編,即Java的對象引用必須在編譯時的進行,以使編譯器能夠實現強類型檢查。
JavaScript採用動態聯編,即JavaScript的對象引用在運行時進行檢查,如不經編譯則就無法實現對象引用的檢查。
三、JavaScript程序運行環境
Java運行環境
軟件環境:
Windows 95/98或Windows NT。
Netscape Navigator x.0或Internet Explorer x.0。
用於編輯HTML文檔的字符編輯器(WS、WPS、Notepad、WordPad等)或HTML文檔編輯器。
硬件配置:
首先必須具備運行Windows 95/98或Windows NT的基本硬件配置環境。推薦:
基本內存32M。
CRT只少需要256顏色,分辨率在640X480以上。
CPU只少233以上。
鼠標和其它外部設置(根據需要選用)。
四、編寫第一個JavaScript程序
下面我們通過一個例子,編寫第一個JavaScript程序。通過它可說明JavaScript的腳本是怎樣被嵌入到HTML文檔中的。
test1.html文檔:
<html> <head> <Script Language ="JavaScript"> // JavaScript Appears here. alert("這是第一個JavaScript例子!"); alert("歡迎你進入JavaScript世界!"); alert("今後我們將共同學習JavaScript知識!"); </Script> </Head> </Html> |
在Internet Explore5.0中運行行後的結果見圖1-1所示。
圖1-1 程序運行的結果
說明: test.html是HTML文檔,其標識格式爲標準的HTML格式;
如同HTML標識語言一樣, JavaScript程序代碼是一些可用字處理軟件瀏覽的文本,它在描述頁面的HTML相關區域出現。
JavaScript代碼由 <Script Language ="JavaScript">...</Script>說明。在標識<Script Language ="JavaScript">...</Script>之間就可加入JavaScript腳本。
alert()是JavaScript的窗口對象方法,其功能是彈出一個具有OK對話框並顯示()中的字符串。
通過<!-- ...//-->標識說明:若不認識JavaScript代碼的瀏覽器,則所有在其中的標識均被忽略;若認識,則執行其結果。使用註釋這是一個好的編程習慣,它使其他人可以讀懂你的語言。
JavaScript 以 </Script> 標籤結束。
從上面的實例分析中我們可以看出,編寫一個JavaScript程序確實非常容易的。
JavaScript基本數據結構
(李曉華 2001年04月29日 01:50)
JavaScript提供腳本語言的編程與C++非常相似,它只是去掉了C語言中有關指針等容易產生的錯誤,並提供了功能強大的類庫。對於已經具備C++或C語言的人來說,學習JavaScript腳本語言是一件非常輕鬆愉快的事。
一、JavaScript代碼的加入
JavaScript的腳本包括在HTML中,它成爲HTML文檔的一部分。與HTML標識相結合,構成了一個功能強大的Internet網上編程語言。可以直接將JavaScript腳本加入文檔:
<Script Language ="JavaScript"> JavaScript語言代碼; JavaScript 語言代碼; .... </Script> |
說明:
通過標識<Script>...</Script>指明JavaScript腳本源代碼將放入其間。
通過屬性Language ="JavaScript"說明標識中是使用的何種語言,這裏是JavaScript語言, 表示在JavaScript中使用的語言。
下面是將JavaScript腳本加入Web文檔中的例子:
Test2.html
<HTML> <Head> <Script Language ="JavaScript"> document. Write("這是賽迪網互動學校"); document. close(); </Script> </Head> </HTML> |
在瀏覽器的窗口中調用test2.html,則顯示“這是賽迪網互動學校”字串。見圖2所示。
圖2 |
說明: Document. write()是文檔對象的輸出函數,其功能是將括號中的字符或變量值輸出到窗口;document. close()是將輸出關閉。 可將<Script>...</Script>標識放入head>.. </Head>或<Body> ...</Body>之間。將JavaScript標識放置<Head>... </Head>在頭部之間,使之在主頁和其餘部分代碼之前裝載,從而可使代碼的功能更強大;可以將JavaScript標識放置在<Body>... </Body>主體之間以實現某些部分動態地創建文檔。 |
二、基本數據類型
JavaScript腳本語言同其它語言一樣,有它自身的基本數據類型、表達式和算術運算符以及程序的基本框架結構。JavaScript提供了四種基本的數據類型用來處理數字和文字, 而變量提供存放信息的地方, 表達式則可以完成較複雜的信息處理。
1、基本數據類型
在JavaScript中四種基本的數據類型:數值(整數和實數)、字符串型(用“”號或‘’括起來的字符或數值)、布爾型(使True或False表示)和空值。在JavaScript的基本類型中的數據可以是常量,也可以變量。由於JavaScript採用弱類型的形式,因而一個數據的變量或常量不必首先作聲明,而是在使用或賦值時確定其數據的類型的。當然也可以先聲明該數據的類型,它是通過在賦值時自動說明其數據類型的。
2、常量
整型常量
JavaScript的常量通常又稱字面常量,它是不能改變的數據。其整型常量可以使用十六進制、八進制和十進制表示其值。
實型常量
實型常量是由整數部分加小數部分表示,如12.32、193.98 。可以使用科學或標準方法表示:5E7、4e5等。
布爾值
布爾常量只有兩種狀態:True或False。 它主要用來說明或代表一種狀態或標誌,以說明操作流程。它與C++是不一樣的,C++可以用1或0表示其狀態,而JavaScript只能用True或False表示其狀態。
字符型常量
使用單引號(‘)或雙引號(“)括起來的一個或幾個字符。如 "This is a book of JavaScript "、"3245"、"ewrt234234" 等。
空值
JavaScript中有一個空值null,表示什麼也沒有。如試圖引用沒有定義的變量,則返回一個Null值。
特殊字符
同C語言一樣,JavaScript中同樣以有些以反斜槓(/)開頭的不可顯示的特殊字符。通常稱爲控制字符。
3、變量
變量的主要作用是存取數據、提供存放信息的容器。對於變量必須明確變量的命名、變量的類型、變量的聲明及其變量的作用域。
變量的命名
JavaScript中的變量命名同其計算機語言非常相似,這裏要注意以下兩點:
A、必須是一個有效的變量,即變量以字母開頭,中間可以出現數字如test1、text2等。除下劃線(-)作爲連字符外,變量名稱不能有空格、(+)、(-)、(,)或其它符號。
B、不能使用JavaScript中的關鍵字作爲變量。
在JavaScript中定義了40多個類鍵字,這些關鍵是JavaScript內部使用的,不能作爲變量的名稱。如Var、int、double、true不能作爲變量的名稱。
在對變量命名時,最好把變量的意義與其代表的意思對應起來,以免出現錯誤。
變量的類型
在JavaScript中,變量可以用命令Var作聲明:
var mytest;
該例子定義了一個mytest變量。但沒有賦予它的值。
Var mytest=”This is a book”
該例子定義了一個mytest變量, 同時賦予了它的值。
在JavaScript中,變量以可以不作聲明,而在使用時再根據數據的類型來確其變量的類型。
如:
x=100
y="125"
xy= True
cost=19.5等。
其中x整數,y爲字符串,xy爲布爾型,cost爲實型。
變量的聲明及其作用域
JavaScript變量可以在使用前先作聲明,並可賦值。通過使用var關鍵字對變量作聲明。對變量作聲明的最大好處就是能及時發現代碼中的錯誤;因爲JavaScript是採用動態編譯的,而動態編譯是不易發現代碼中的錯誤,特別是變量命名的方面。
對於變量還有一個重要性──那就是變量的作用域。在JavaScript中同樣有全局變量和局部變量。全局變量是定義在所有函數體之外,其作用範圍是整個函數;而局部變量是定義在函數體之內,只對其該函數是可見的,而對其它函數則是不可見的。
三、表達式和運算符
1、表達式
在定義完變量後,就可以對它們進行賦值、改變、計算等一系列操作,這一過程通常又叫稱一個叫表達式來完成,可以說它是變量、常量、布爾及運算符的集合,因此表達式可以分爲算術表述式、字串表達式、賦值表達式以及布爾表達式等。
2、運算符
運算符完成操作的一系列符號,在JavaScript中有算術運算符,如+、-、*、/等;有比較運算符如!=、==等; 有邏輯布爾運算符如!(取反)、|、||; 有字串運算如+ 、 +=等。
在JavaScript主要有雙目運算符和單目運算符。其雙目運算符由下列組成:
操作數1 運算符 操作數2
即由兩個操作數和一個運算符組成。如50+40、"This"+"that"等。單目運算符,只需一個操作數,其運算符可在前或後。
(1)算術運算符
JavaScript中的算術運算符有單目運算符和雙目運算符。
雙目運算符:
+(加) 、-(減)、 *(乘)、 /(除)、 %(取模) 、|(按位或)、&(按位與)、<<(左移)、 >>(右移)、 >>>(右移,零填充)。
單目運算符:
-(取反)、~(取補)、++(遞加1)、--(遞減1)。
(2)比較運算符
比較運算符它的基本操作過程是,首先對它的操作數進行比較,爾後再返回一個true或False值,有8個比較運算符:
<(小於)、>(大於)、<=(小於等於)、>=(大於等於)、==(等於)、!=(不等於)。
(3)布爾邏輯運算符
在JavaScript中增加了幾個布爾邏輯運算符:
!(取反)、&=(與之後賦值)、 &(邏輯與)、 |=(或之後賦值)、 |(邏輯或)、 ^=(異或之後賦值)、 ^(邏輯異或)、 ?:(三目操作符)、||(或)、==(等於)、|=(不等於)。
其中三目操作符主要格式如下:
操作數?結果1:結果2
若操作數的結果爲真,則表述式的結果爲結果1,否則爲結果2。
四、範例
下面是一個跑馬燈效果的JavaScript文檔。
Test2_1.html
<html> <head> <script Language="JavaScript"> var msg="這是一個跑馬燈效果的JavaScript文檔"; var interval = 100; var spacelen = 120; var space10=" "; var seq=0; function Scroll() { len = msg.length; window.status = msg.substring(0, seq+1); seq++; if ( seq >= len ) { seq = spacelen; window.setTimeout("Scroll2();", interval ); } else window.setTimeout("Scroll();", interval ); } function Scroll2() { var out=""; for (i=1; i<=spacelen/space10.length; i++) out += space10; out = out + msg; len=out.length; window.status=out.substring(seq, len); seq++; if ( seq >= len ) { seq = 0; }; window.setTimeout("Scroll2();", interval ); } Scroll(); </script> <body> </body> </html> |
本文介紹了JavaScript腳本是如何加入Web頁面, 並學習了JavaScript語言中的基本數據類型、變量、常量、操作運算符等。可以看出,對於已經掌握C++語言的人來說,學習JavaScript真是一件非常輕鬆愉快的事。
JavaScript程序構成
(李曉華 2001年04月29日 01:50)
JavaScript腳本語言的基本構成是由控制語句、函數、對象、方法、屬性等,來實現編程的。
一、程序控制流
在任何一種語言中,程序控制流是必須的,它能使得整個程序減小混亂,使之順利按其一定的方式執行。下面是JavaScript常用的程序控制流結構及語句:
1、if條件語句
基本格式
if(表述式)
語句段1;
......
else
語句段2;
.....
功能:若表達式爲true,則執行語句段1;否則執行語句段2。
說明:
if -else 語句是JavaScript中最基本的控制語句,通過它可以改變語句的執行順序。
表達式中必須使用關係語句,來實現判斷,它是作爲一個布爾值來估算的。
它將零和非零的數分別轉化成false和true。
若if後的語句有多行,則必須使用花括號將其括起來。
if語句的嵌套
if(布爾值)語句1;
else(布爾值)語句2;
else if(布爾值)語句3;
……
else 語句4;
在這種情況下,每一級的布爾表述式都會被計算,若爲真,則執行其相應的語句,否則執行else後的語句。
2、For循環語句
基本格式
for(初始化;條件;增量)
語句集;
功能:實現條件循環,當條件成立時,執行語句集,否則跳出循環體。
說明:
初始化參數告訴循環的開始位置,必須賦予變量的初值;
條件:是用於判別循環停止時的條件。若條件滿足,則執行循環體,否則 跳出。
增量:主要定義循環控制變量在每次循環時按什麼方式變化。
三個主要語句之間,必須使用逗號分隔。
3、while循環
基本格式
while(條件)
語句集;
該語句與For語句一樣,當條件爲真時,重複循環,否則退出循環。
For與while語句
兩種語句都是循環語句,使用For語句在處理有關數字時更易看懂,也較緊湊;而while循環對複雜的語句效果更特別。
4、break和continue語句
與C++語言相同,使用break語句使得循環從For或while中跳出,continue使得跳過循環內剩餘的語句而進入下一次循環。
二、函數
函數爲程序設計人員提供了一個豐常方便的能力。通常在進行一個複雜的程序設計時,總是根據所要完成的功能,將程序劃分爲一些相對獨立的部分,每部分編寫一個函數。從而,使各部分充分獨立,任務單一,程序清晰,易懂、易讀、易維護。JavaScript函數可以封裝那些在程序中可能要多次用到的模塊。並可作爲事件驅動的結果而調用的程序。從而實現一個函數把它與事件驅動相關聯。這是與其它語言不樣的地方。
1、JavaScript函數定義
Function 函數名 (參數,變元){
函數體;.
Return 表達式;
}
說明:
當調用函數時,所用變量或字面量均可作爲變元傳遞。
函數由關鍵字Function定義。
函數名:定義自己函數的名字。
參數表,是傳遞給函數使用或操作的值,其值可以是常量 ,變量或其它表達式。
通過指定函數名(實參)來調用一個函數。
必須使用Return將值返回。
函數名對大小寫是敏感的。
2、函數中的形式參數:
在函數的定義中,我們看到函數名後有參數表,這些參數變量可能是一個或幾個。那麼怎樣才能確定參數變量的個數呢?在JavaScript中可通過arguments .Length來檢查參數的個數。
例:
Function function_Name(exp1,exp2,exp3,exp4) Number =function _Name . arguments .length; if (Number>1) document.wrile(exp2); if (Number>2) document.write(exp3); if(Number>3) document.write(exp4); ... |
三、事件驅動及事件處理
1、基本概念
JavaScript是基於對象(object-based)的語言。這與Java不同,Java是面向對象的語言。而基於對象的基本特徵,就是採用事件驅動(event-driven)。它是在用形界面的環境下,使得一切輸入變化簡單化。通常鼠標或熱鍵的動作我們稱之爲事件(Event),而由鼠標或熱鍵引發的一連串程序的動作,稱之爲事件驅動(Event Driver)。而對事件進行處理程序或函數,我們稱之爲事件處理程序(Event Handler)。
2、事件處理程序
在JavaScript中對象事件的處理通常由函數(Function)擔任。其基本格式與函數全部一樣,可以將前面所介紹的所有函數作爲事件處理程序。
格式如下:
Function 事件處理名(參數表){
事件處理語句集;
……
}
3、事件驅動
JavaScript事件驅動中的事件是通過鼠標或熱鍵的動作引發的。它主要有以下幾個事件:
(1)單擊事件onClick
當用戶單擊鼠標按鈕時,產生onClick事件。同時onClick指定的事件處理程序或代碼將被調用執行。通常在下列基本對象中產生:
button(按鈕對象)
checkbox(複選框)或(檢查列表框)
radio (單選鈕)
reset buttons(重要按鈕)
submit buttons(提交按鈕)
例:可通過下列按鈕激活change()文件:
<Form> <Input type="button" Value=“ ” onClick="change()"> </Form> |
<Input type="button" value=" " onclick=alert("這是一個例子");
(2)onChange改變事件
當利用text或texturea元素輸入字符值改變時發該事件,同時當在select表格項中一個選項狀態改變後也會引發該事件。
例:
<Form> <Input type="text" name="Test" value="Test" onCharge="check('this.test)"> </Form> |
當Text或Textarea對象中的文字被加亮後,引發該事件。
(4)獲得焦點事件onFocus
當用戶單擊Text或textarea以及select對象時,產生該事件。此時該對象成爲前臺對象。
(5)失去焦點onBlur
當text對象或textarea對象以及select對象不再擁有焦點、而退到後臺時,引發該文件,他與onFocas事件是一個對應的關係。
(6)載入文件onLoad
當文檔載入時,產生該事件。onLoad一個作用就是在首次載入一個文檔時檢測cookie的值,並用一個變量爲其賦值,使它可以被源代碼使用。
(7)卸載文件onUnload
當Web頁面退出時引發onUnload事件,並可更新Cookie的狀態。
四、範例
範例1:下例程序是一個自動裝載和自動卸載的例子。即當裝入HTML文檔時調用loadform()函數,而退出該文檔進入另一HTML文檔時則首先調用unloadform()函數,確認後方可進入。
test3_1.htm <HTML> <HEAD> <script Language="JavaScript"> <!-- function loadform(){ alert("這是一個自動裝載例子!"); } function unloadform(){ alert("這是一個卸載例子!"); } //--> </Script> </HEAD> <BODY OnLoad="loadform()" OnUnload="unloadform()"> <a href="test.htm">調用</a> </BODY> </HTML> |
範例2:這是一個獲取瀏覽器版本號的程序。該程序首先顯示一個波浪一提示信息。之後顯示瀏覽器的版本號有關信息。
test3_2.htm
<html> <head> <script language="JavaScript"><!-- // --> function makeArray(n){ this.length=n return this } function hexfromdec(num) { hex=new makeArray(1); var hexstring=""; var shifthex=16; var temp1=num; for(x=1; x>=0; x--) { hex[x]=Math.round(temp1/shifthex - .5); hex[x-1]=temp1 - hex[x] * shifthex; temp1=hex[x-1]; shifthex /= 16; } for (x=1; x>=0; x--) { hexstring+=getletter(hex[x]); } return (hexstring); } function getletter(num) { if (num < 10) { return num; } else { if (num == 10) { return "A" } if (num == 11) { return "B" } if (num == 12) { return "C" } if (num == 13) { return "D" } if (num == 14) { return "E" } if (num == 15) { return "F" } } } function rainbow(text){ var color_d1; var allstring=""; for(i=0;i<text.length;i=i+2){ color_d1=255*Math.sin(i/(text.length/3)); color_h1=hexfromdec(color_d1); allstring+="<FONT COLOR="+color_h1+"ff"+color_h1+">"+text.substring(i,i+2)+"</FONT>"; } return allstring; } function sizefont(text){ var color_d1; var allstring=""; var flag=0; for(i=0,j=0;i<text.length;i=i+1){ if (flag==0) { j++; if (j>=7) { flag=1;}} if (flag==1) { j=j-1; if (j<=0) { flag=0; }} allstring+="<FONT SIZE="+ j + ">" + text.substring(i,i+1) + "</FONT>"; } return allstring; } document.write("<font size=8><CENTER>") document.write("<BR><BR>") document.write( sizefont("這是一個獲取WEB瀏覽器的程序")) document.write("</CENTER></font>") document.write("瀏覽器名稱: "+navigator.appName+"<br>"); document.write("版本號: "+navigator.appVersion+"<br>"); document.write("代碼名字: "+navigator.appCodeName+"<br>"); document.write("用戶代理標識: "+navigator.userAgent); </script> <body> </body> </html> |
圖1
本講介紹了JavaScript程序設計的有關內容。程序流、函數、事件是我們學習掌握JavaScript編程的重點。
基於對象的JavaScript語言
(李曉華 2001年04月29日 01:50)
JavaScript語言是基於對象的(Object-Based),而不是面向對象的(object-oriented)。之所以說它是一門基於對象的語言,主要是因爲它沒有提供象抽象、繼承、重載等有關面嚮對象語言的許多功能。而是把其它語言所創建的複雜對象統一起來,從而形成一個非常強大的對象系統。 雖然JavaScript語言是一門基於對象的,但它還是具有一些面向對象的基本特徵。它可以根據需要創建自己的對象,從而進一步擴大JavaScript的應用範圍,增強編寫功能強大的Web文檔。
一、對象的基礎知識
1、對象的基本結構
JavaScript中的對象是由屬性(properties)和方法(methods)兩個基本的元素的構成的。前者是對象在實施其所需要行爲的過程中,實現信息的裝載單位,從而與變量相關聯;後者是指對象能夠按照設計者的意圖而被執行,從而與特定的函數相聯。
2、引用對象的途徑
一個對象要真正地被使用,可採用以下幾種方式獲得:
o 引用JavaScript內部對象;
o 由瀏覽器環境中提供;
o 創建新對象。
這就是說一個對象在被引用之前,這個對象必須存在,否則引用將毫無意義,而出現錯誤信息。從上面中我們可以看出JavaScript引用對象可通過三種方式獲取。要麼創建新的對象,要麼利用現存的對象。
3、有關對象操作語句
JavaScript不是一純面向對象的語言,它設有提供面嚮對象語言的許多功能,因此JavaScript設計者之所以把它你“基於對象”而不是面向對象的語言,在JavaScript中提供了幾個用於操作對象的語句和關鍵字及運算符。
(1) For...in語句
格式如下:
For(對象屬性名 in 已知對象名)
說明:
o 該語句的功能是用於對已知對象的所有屬性進行操作的控制循環。它是將一個已知對象的所有屬性反覆置給一個變量;而不是使用計數器來實現的。
o 該語句的優點就是無需知道對象中屬性的個數即可進行操作。
例:下列函數是顯示數組中的內容:
Function showData(object) for (var X=0; X<30;X++) document.write(object[i]); |
該函數是通過數組下標順序值,來訪問每個對象的屬性,使用這種方式首先必須知道數組的下標值,否則若超出範圍,則就會發生錯誤。而使For...in語句,則根本不需要知道對象屬性的個數,見下:
Function showData(object) for(var prop in object) document.write(object[prop]); |
使用該函數時,在循環體中,For自動將的屬性取出來,直到最後爲此。
(2) with語句
使用該語句的意思是:在該語句體內,任何對變量的引用被認爲是這個對象的屬性,以節省一些代碼。
with object{
...}
所有在with語句後的花括號中的語句,都是在後面object對象的作用域的。
(3) this關鍵字
this是對當前的引用,在JavaScript由於對象的引用是多層次,多方位的,往往一個對象的引用又需要對另一個對象的引用,而另一個對象有可能又要引用另一個對象,這樣有可能造成混亂,最後自己已不知道現在引用的那一個對象,爲此JavaScript提供了一個用於將對象指定當前對象的語句this。
(4) New運算符
雖然在JavaScript中對象的功能已經是非常強大的了。但更強大的是設計人員可以按照需求來創建自己的對象,以滿足某一特定的要求。使用New運算符可以創建一個新的對象。其創建對象使用如下格式:
Newobject=NEW Object(Parameters table);
其中Newobject創建的新對象:object是已經存在的對象; parameters table參數表;new是JavaScript中的命令語句。
如創建一個日期新對象
newData=New Data()
birthday=New Data (December 12.1998)
之後就可使NewData、birthday作爲一個新的日期對象了。
4、對象屬性的引用
對象屬性的引用可由下列三種方式之一實現:
(1)使用點(.)運算符
university.Name=“雲南省” university.city=“昆明市” university.Date="1999" |
其中university是一個已經存在的對象,Name、City、Date是它的三個屬性,並通過操作對其賦值。
(2)通過對象的下標實現引用
university[0]=“雲南” university[1]=“昆明市” university[2]="1999" |
通過數組形式的訪問屬性,可以使用循環操作獲取其值。
function showunievsity(object) for (var j=0;j<2; j++) document.write(object[j]) |
若採用For...in則可以不知其屬性的個數後就可以實現:
Function showmy(object) for (var prop in this) docament.write(this[prop]); |
(3)通過字符串的形式實現
university["Name"]=“雲南” university["City"]=“昆明市” university["Date"]="1999" |
5、對象的方法的引用
在JavaScript中對象方法的引用是非常簡單的。
ObjectName.methods()
實際上methods()=FunctionName方法實質上是一個函數。 如引用university對象中的showmy()方法,則可使用:
document.write (university.showmy())
或:document.write(university)
如引用math內部對象中cos()的方法
則:
with(math)
document.write(cos(35));
document.write(cos(80));
若不使用with則引用時相對要複雜些:
document.write(Math.cos(35))
document.write(math.sin(80))
二、常用對象的屬性和方法
JavaScript爲我們提供了一些非常有用的常用內部對象和方法。用戶不需要用腳本來實現這些功能。這正是基於對象編程的真正目的。
在JavaScript提供了string(字符串)、math(數值計算)和Date(日期)三種對象和其它一些相關的方法。從而爲編程人員快速開發強大的腳本程序提供了非常有利的條件。
1、常用內部對象
在JavaScript中對於對象屬性與方法的引用,有兩種情況:其一是說該對象是靜態對象,即在引用該對象的屬性或方法時不需要爲它創建實例;而另一種對象則在引用它的對象或方法是必須爲它創建一個實例,即該對象是動態對象。
對JavaScript內部對象的引用,以是緊緊圍繞着它的屬性與方法進行的。因而明確對象的靜動性對於掌握和理解JavaScript內部對象是具有非常重要的意義。
1)、串對象
o string對象:內部靜態性。
o 訪問properties和methods時,可使用(.)運算符實現。
o 基本使用格式:objectName.prop/methods
(1)串對象的屬性
該對象只有一個屬性,即length。它表明了字符串中的字符個數,包括所有符號。
例:
mytest="This is a JavaScript"
mystringlength=mytest.length
最後mystringlength返回mytest字串的長度爲20。
(2)串對象的方法
string對象的方法共有19個。主要用於有關字符串在Web頁面中的顯示、字體大小、字體顏色、字符的搜索以及字符的大小寫轉換。
其主要方法如下:
o 錨點anchor():該方法創建如用Html文檔中一樣的anchor標記。使用anchor如用Html中(A Name="")一樣。通過下列格式訪問:string.anchor(anchorName)。
o 有關字符顯示的控制方法
big字體顯示, Italics()斜體字顯示,bold()粗體字顯示,blink()字符閃爍顯示,small()字符用小體字顯示,fixed()固定高亮字顯示、fontsize(size)控制字體大小等。
o 字體顏色方法;fontcolor(color)
o 字符串大小寫轉換
toLowerCase()-小寫轉換,toUpperCase()大寫轉換。下列把一個給定的串分別轉換成大寫和小寫格式:
string=stringValue.toUpperCase和string=stringValue.toLowerCase。
o 字符搜索:indexOf[charactor,fromIndex]
從指定formIndtx位置開始搜索charactor第一次出現的位置。
返回字串的一部分字串:substring(start,end)
從start開始到end的字符全部返回。
2)、算術函數的math對象
功能:提供除加、減、乘、除以外的一引些自述運算。如對數,平方根等 。
靜動性:靜態對象
(1)主要屬性
math中提供了6個屬性,它們是數學中經常用到的常數E、以10爲底的自然對數LN10、以2爲底的自然對數LN2、3.14159的PI、1/2的平方根SQRT1-2,2的平方根爲SQRT2。
(2)主要方法
絕對值:abs()
正弦餘弦值:sin(),cos()
反正弦反餘弦 :asin(), acos()
正切反正切:tan(),atan()
四捨五入:round()
平方根:sqrt()
基於幾方次的值:Pow(base,exponent)
...
3)、日期及時間對象
功能:提供一個有關日期和時間的對象。
靜動性:動態性,即必須使用New運算符創建一個實例。例:
MyDate=New Date()
Date對象沒有提供直接訪問的屬性。只具有獲取和設置日期和時間的方法。
日期起始值:1770年1月1日00:00:00。
1. 獲取日期的時間方法
getYear(): 返回年數
getMonth():返回當月號數
getDate(): 返回當日號數
getDay():返回星期幾
getHours():返回小時數
getMintes(:返回分鐘數
getSeconds():返回秒數
getTime() : 返回毫秒數
(2)設置日期和時間:
setYear();設置年
setDate():設置當月號數
setMonth():設置當月份數
setHours():設置小時數
setMintes():設置分鐘數
setSeconds():設置秒數
setTime ():設置毫秒數
...
2、JavaScript中的系統函數
JavaScript中的系統函數又稱內部方法。它提供了與任何對象無關的系統函數,使用這些函數不需創建任何實例,可直接用。
1.返回字符串表達式中的值:
方法名:eval(字串表達式),例:
test=eval("8+9+5/2");
2. 返回字符串ASCI碼:
方法名:unEscape (string)
3.返回字符的編碼:
方法名:escape(character)
4.返回實數:
parseFloat(floustring);
5.返回不同進制的數:
parseInt(numbestring ,rad.X)
其中radix是數的進制,numbs字符串數
三、範例
下面是一個時鐘顯示的JavaScript文檔。在文檔中用了非常多的函數。
Test4_1.htm
<html> <head> <style TYPE="text/css"> <style> </style> <title>時鐘</title> <script LANGUAGE="JavaScript"> function showClock() { } function hideClock() { } var timerID = null var timerRunning = false function stopClock() { if(timerRunning) clearTimeout(timerID); timerRunning = false document.clock.face.value = ""; } function showTime() { var now = new Date(); var year = now.getYear(); var month = now.getMonth() + 1; var date = now.getDate(); var hours = now.getHours(); var mins = now.getMinutes(); var secs = now.getSeconds(); var timeVal = ""; timeVal += ((hours <= 12) ? hours : hours - 12); timeVal += ((mins < 10) ? ":0" : ":") + mins; timeVal += ((secs <= 10) ? ":0" : ":") + secs; timeVal += ((hours < 12) ? "AM" : "PM"); timeVal += ((month < 10) ? " on 0" : " on ") + month + "-"; timeVal += date + "-" + year; document.clock.face.value = timeVal; timerID = setTimeout("showTime()", 1000); timerRunning = true } function startClock() { stopClock(); showTime(); } function windowOpener( indexnum ){ var loadpos="date.html"+"#"+indexnum; controlWindow=window.open(loadpos,"date","toolbar=no,location=no, directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes, width=620,height=400"); } </script> </head> <body onLoad="startClock()" > <p align="center"><big><span style="background-color: rgb(45,45,45)"> <font face="Arial">form</font> <font face="宋體">時鐘</font> </span></big></p> <p align="center"> </p> <div align="center"><center> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><form NAME="clock" onSubmit="0"> <div align="center"><center><p><input TYPE="text" NAME="face" size="20" VALUE style="background-color: rgb(192,192,192)"> </p> </center></div> </form> </td> </tr> </table> </center></div> </body> </html> |
本講介紹了基於對象的JavaScript中常用內部對象屬性、方法的使用。
在JavaScript中創建新對象
(李曉華 2001年04月29日 01:50)
使用JavaScript可以創建自己的對象。雖然JavaScript內部和瀏覽器本身的功能已十分強大,但JavaScript還是提供了創建一個新對象的方法。使其不必像超文本標識語言那樣,求於或其它多媒體工具,就能完成許多複雜的工作。
在JavaScript中創建一個新的對象是十分簡單的。首先它必須定義一個對象,而後再爲該對象創建一個實例。這個實例就是一個新對象,它具有對象定義中的基本特徵。
一、對象的定義
JavaScript對象的定義,其基本格式如下:
Function Object(屬性表)
This.prop1=prop1
This.prop2=prop2
...
This.meth=FunctionName1;
This.meth=FunctionName2;
...
在一個對象的定義中,可以爲該對象指明其屬性和方法。通過屬性和方法構成了一個對象的實例。如以下是一個關於University對象的定義:
Function university(name,city,creatDate URL)
This.name=name
This.city=city
This.creatDate=New Date(creatDate)
This.URL=URL
其基本含義如下:
Name-指定一個“單位”名稱。
City-“單位”所在城市。
CreatDate-記載university對象的更新日期。
URL-該對象指向一個網址。
二、創建對象實例
一旦對象定義完成後,就可以爲該對象創建一個實例了:
NewObject=New object();
其中Newobjet是新的對象,Object已經定義好的對象。例:
U1=New university(“雲南省”,“昆明市”,"January 05,199712:00:00","http://www.YN.KM") U2=New university(“雲南電子科技大學”,“昆明”,"January 07,1997 12:00:00","htlp://www.YNKJ.CN") |
三、對象方法的使用
在對象中除了使用屬性外,有時還需要使用方法。在對象的定義中,我們看到This.meth=FunctionName語句,那就是爲定義對象的方法。實質對象的方法就是一個函數FunctionName,通過它實現自己的意圖。
例在university對象中增加一個方法,該方法是顯示它自己本身,並返回相應的字串。
function university(name,city,createDate,URL)
This.Name=Name;
This.city=city;
This.createDate=New Date(creatDate);
This.URL=URL;
This.showuniversity=showuniversity;
其中This.showuniversity就是定義了一個方法---showuniversity()。
而showuniversity()方法是實現university對象本身的顯示。
function showuniversity()
For (var prop in this)
alert(prop+="+this[prop]+"");
其中alert是JavaScript中的內部函數,顯示其字符串。
四、JavaScript中的數組
使用New創建數組
JavaScript中沒有提供像其它語言具有明顯的數組類型,但可以通過function定義一個數組,並使用New對象操作符創建一個具有下標的數組。從而可以實現任何數據類型的存儲。
a、定義對象的數組
Function arrayName(size){
This.length=Size;
for(var X=; X<=size;X++)
this[X]=0;
Reture this;
}
其中arrayName是定義數組的一個名子,Size是有關數組大小的值(1-size),即數組元素的個數。通過for循環對一個當前對象的數組進行定義,最後返回這個數組。
從中可以看出,JavaScript中的數組是從1到size,這與其它0到size的數組表示方法有所不同,當然你可根據需要將數組的下標由1到size調整到0到size-1,可由下列實現:
Function arrayName (size)
For (var X=0; X<=size;X++)
this[X]=0;
this.lenght=size;
Return this;
從上面可以看出該方法是隻是調整了this.lenght的位置,該位置是用於存儲數組的大小的。從而調整後的數組的下標將與其它語言一致。但請讀者注意正是由於數組下標順序由1到size,使得JavaScript中的對象功能更加強大。
b、創建數組實例
一個數組定義完成以後,還不能馬上使用,必須爲該數組創建一個數組實例:
Myarray=New arrayName(n);
並賦於初值:
Myarray[1]=“字串1”;
Myarray[2]=“字串2”;
Myarray[3]=“字串3”;
...
Myarray[n]=“字串n”;
一旦給數組賦於了初值後,數組中就具有真正意義的數據了,以後就可以在程序設計過程中直接引用。
創建多維數組
Function creatMArray(row,col){
var indx=0;
this.length=(row*10)+col
for(var x=1;x<=row;x++)
for(var y=1;y<=col;y++)
indx=(x*10)+y;
this[indx]=””;
}
myMArray=new creatMArray();
之後可通過myMArray[11]、myMArray[12]、myMArray[13]、myMArray[21]、myMArray[22]、myMArray[23]、
…來引用。
內部數組
在Java中爲了方便內部對象的操作,可以使用窗體(Forms)、框架(Frames)、元素(element)、鏈接(links)和錨(Anchors)數組實現對象的訪問。
anchors[]:使用《A name=“anchorName“》標識來建立錨的鏈接。
links[]: 使用<A href=”URL”>來定義一個越文本鏈接項。
Forms[]: 在程序中使用多窗體時,建立該數組。
Elements[]:在一個窗口中使用從個元素時,建立該數組。
Frames[]:建立框架時,使用該數組
anchors[]用於窗體的訪問(它是通過《form name=“form1”》所指定的),link[]用於被鏈接到的錨點的訪問(它是通過《a href=URL》所指定的)。Forms[]反映窗體的屬性,而anchors[]反映Web頁面中的鏈接屬性。
有關錨數組的文檔:
<HTML>
<HEAD>
<BODY>
<A NAME=”MyAnchorsName1”> 定義第一個錨名
HTML Code
<A NAME=”MyAnchorsName2”> 定義第二個錨名
HTML Code
<A HREF=”#MyAnchorsName1”>建立錨的鏈接
<A HREF=”#MyAnchorsName2?gt; 建立錨的鏈接
….
該文檔段建立了兩面全錨的鏈接,可通過Anchors[]訪問這些錨。document.Anchors[0]反映第一個錨,而document.Anchors[1]反映第二個錨的有關信息。
五、範例
範例1:一個動態文字滾動的例子。
test5_1.htm
<html> <head> <title></title> <script LANGUAGE="JavaScript"> with (top.window.location) {baseURL = href.substring (0,href.lastIndexOf ("/") + 1)} total_toc_items = 0; current_overID = ""; last_overID = ""; browser = navigator.appName; version = parseInt(navigator.appVersion); client=null; loaded = 0; if (browser == "Netscape" && version >= 3) client = "ns3"; function toc_item (img_name,icon_col,width,height) { if (client =="ns3") { img_prefix = baseURL + img_name; this.icon_col = icon_col; this.toc_img_off = new Image (width,height); this.toc_img_off.src = img_prefix + "_off.gif"; this.toc_img_on = new Image (width,height); this.toc_img_on.src = img_prefix + "_on.gif"; } } function new_toc_item (img_name,icon_row,width,height) { toc_item [img_name] = new toc_item (img_name,icon_row,width,height); } function toc_mouseover (itemID) { if (client =="ns3") { current_overID = itemID; if (current_overID != last_overID) { document [current_overID].src = toc_item [current_overID].toc_img_on.src; if (last_overID != "") { document.images [last_overID].src = toc_item[last_overID].toc_img_off.src; } last_overID = current_overID; } } } function toc_mouseout () { if (client =="ns3") { if (current_overID != "") { document.images [current_overID].src = toc_item [current_overID].toc_img_off.src; } current_overID = ""; last_overID = ""; } } new_toc_item ("1",2,120,20); <!-- Begin function bannerObject(p){ this.msg = MESSAGE this.out = " " this.pos = POSITION this.delay = DELAY this.i = 0 this.reset = clearMessage} function clearMessage(){ this.pos = POSITION} var POSITION = 50; var DELAY = 150; var MESSAGE = "這是一個動態JavaScript文字顯示的例子"; var scroll = new bannerObject(); function scroller(){ scroll.out += " "; if(scroll.pos>0) for (scroll.i = 0; scroll.i < scroll.pos; scroll.i++) { scroll.out +=" " ; } if (scroll.pos>= 0) scroll.out += scroll.msg else scroll.out = scroll.msg.substring(-scroll.pos,scroll.msg.length) document.noticeForm.notice.value = scroll.out scroll.out = " "; scroll.pos--; scroll.pos--; if (scroll.pos < -(scroll.msg.length)) { scroll.reset(); } setTimeout ('scroller()',scroll.delay);} </script> </head> <body onload="scroller()" bgcolor="#000000" link="#C0C0C0" vlink="#C0C0C0" alink="#008080" text="#C0C0C0"> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><form NAME="noticeForm"> <p><input TYPE="text" name="notice" size="40" style="background-color: rgb(192,192,192)"></p> </form> </td> </tr> </table> </center></div> </body> </html> |
範例2:顏色變化的例子。
test5_2.htm
<html> <head> <script> <!-- function makearray(n) { this.length = n; for(var i = 1; i <= n; i++) this[i] = 0; return this;} hexa = new makearray(16); for(var i = 0; i < 10; i++) hexa[i] = i; hexa[10]="a"; hexa[11]="b"; hexa[12]="c"; hexa[13]="d"; hexa[14]="e"; hexa[15]="f"; function hex(i) { if (i < 0) return "00"; else if (i > 255) return "ff"; else return "" + hexa[Math.floor(i/16)] + hexa[i%16];} function setbgColor(r, g, b) { var hr = hex(r); var hg = hex(g); var hb = hex(b); document.bgColor = "#"+hr+hg+hb;} function fade(sr, sg, sb, er, eg, eb, step) { for(var i = 0; i <= step; i++) { setbgColor( Math.floor(sr * ((step-i)/step) + er * (i/step)), Math.floor(sg * ((step-i)/step) + eg * (i/step)), Math.floor(sb * ((step-i)/step) + eb * (i/step))); }} function fadein() { fade(255,0,0,0,0,255,100); fade(0,0,255,0,255,0,100); fade(0,255,0, 0,0,0, 100);} fadein(); // --> </script> <body> </body> </html> |
本講介紹了用戶自行創建對象的方法, 用戶可根據需要創建自己的對象。並介紹了JavaScript中建數組的方法。在JavaScript中創建新對象
(李曉華 2001年04月29日 01:50)
使用JavaScript可以創建自己的對象。雖然JavaScript內部和瀏覽器本身的功能已十分強大,但JavaScript還是提供了創建一個新對象的方法。使其不必像超文本標識語言那樣,求於或其它多媒體工具,就能完成許多複雜的工作。
在JavaScript中創建一個新的對象是十分簡單的。首先它必須定義一個對象,而後再爲該對象創建一個實例。這個實例就是一個新對象,它具有對象定義中的基本特徵。
一、對象的定義
JavaScript對象的定義,其基本格式如下:
Function Object(屬性表)
This.prop1=prop1
This.prop2=prop2
...
This.meth=FunctionName1;
This.meth=FunctionName2;
...
在一個對象的定義中,可以爲該對象指明其屬性和方法。通過屬性和方法構成了一個對象的實例。如以下是一個關於University對象的定義:
Function university(name,city,creatDate URL)
This.name=name
This.city=city
This.creatDate=New Date(creatDate)
This.URL=URL
其基本含義如下:
Name-指定一個“單位”名稱。
City-“單位”所在城市。
CreatDate-記載university對象的更新日期。
URL-該對象指向一個網址。
二、創建對象實例
一旦對象定義完成後,就可以爲該對象創建一個實例了:
NewObject=New object();
其中Newobjet是新的對象,Object已經定義好的對象。例:
U1=New university(“雲南省”,“昆明市”,"January 05,199712:00:00","http://www.YN.KM") U2=New university(“雲南電子科技大學”,“昆明”,"January 07,1997 12:00:00","htlp://www.YNKJ.CN") |
三、對象方法的使用
在對象中除了使用屬性外,有時還需要使用方法。在對象的定義中,我們看到This.meth=FunctionName語句,那就是爲定義對象的方法。實質對象的方法就是一個函數FunctionName,通過它實現自己的意圖。
例在university對象中增加一個方法,該方法是顯示它自己本身,並返回相應的字串。
function university(name,city,createDate,URL)
This.Name=Name;
This.city=city;
This.createDate=New Date(creatDate);
This.URL=URL;
This.showuniversity=showuniversity;
其中This.showuniversity就是定義了一個方法---showuniversity()。
而showuniversity()方法是實現university對象本身的顯示。
function showuniversity()
For (var prop in this)
alert(prop+="+this[prop]+"");
其中alert是JavaScript中的內部函數,顯示其字符串。
四、JavaScript中的數組
使用New創建數組
JavaScript中沒有提供像其它語言具有明顯的數組類型,但可以通過function定義一個數組,並使用New對象操作符創建一個具有下標的數組。從而可以實現任何數據類型的存儲。
a、定義對象的數組
Function arrayName(size){
This.length=Size;
for(var X=; X<=size;X++)
this[X]=0;
Reture this;
}
其中arrayName是定義數組的一個名子,Size是有關數組大小的值(1-size),即數組元素的個數。通過for循環對一個當前對象的數組進行定義,最後返回這個數組。
從中可以看出,JavaScript中的數組是從1到size,這與其它0到size的數組表示方法有所不同,當然你可根據需要將數組的下標由1到size調整到0到size-1,可由下列實現:
Function arrayName (size)
For (var X=0; X<=size;X++)
this[X]=0;
this.lenght=size;
Return this;
從上面可以看出該方法是隻是調整了this.lenght的位置,該位置是用於存儲數組的大小的。從而調整後的數組的下標將與其它語言一致。但請讀者注意正是由於數組下標順序由1到size,使得JavaScript中的對象功能更加強大。
b、創建數組實例
一個數組定義完成以後,還不能馬上使用,必須爲該數組創建一個數組實例:
Myarray=New arrayName(n);
並賦於初值:
Myarray[1]=“字串1”;
Myarray[2]=“字串2”;
Myarray[3]=“字串3”;
...
Myarray[n]=“字串n”;
一旦給數組賦於了初值後,數組中就具有真正意義的數據了,以後就可以在程序設計過程中直接引用。
創建多維數組
Function creatMArray(row,col){
var indx=0;
this.length=(row*10)+col
for(var x=1;x<=row;x++)
for(var y=1;y<=col;y++)
indx=(x*10)+y;
this[indx]=””;
}
myMArray=new creatMArray();
之後可通過myMArray[11]、myMArray[12]、myMArray[13]、myMArray[21]、myMArray[22]、myMArray[23]、
…來引用。
內部數組
在Java中爲了方便內部對象的操作,可以使用窗體(Forms)、框架(Frames)、元素(element)、鏈接(links)和錨(Anchors)數組實現對象的訪問。
anchors[]:使用《A name=“anchorName“》標識來建立錨的鏈接。
links[]: 使用<A href=”URL”>來定義一個越文本鏈接項。
Forms[]: 在程序中使用多窗體時,建立該數組。
Elements[]:在一個窗口中使用從個元素時,建立該數組。
Frames[]:建立框架時,使用該數組
anchors[]用於窗體的訪問(它是通過《form name=“form1”》所指定的),link[]用於被鏈接到的錨點的訪問(它是通過《a href=URL》所指定的)。Forms[]反映窗體的屬性,而anchors[]反映Web頁面中的鏈接屬性。
有關錨數組的文檔:
<HTML>
<HEAD>
<BODY>
<A NAME=”MyAnchorsName1”> 定義第一個錨名
HTML Code
<A NAME=”MyAnchorsName2”> 定義第二個錨名
HTML Code
<A HREF=”#MyAnchorsName1”>建立錨的鏈接
<A HREF=”#MyAnchorsName2?gt; 建立錨的鏈接
….
該文檔段建立了兩面全錨的鏈接,可通過Anchors[]訪問這些錨。document.Anchors[0]反映第一個錨,而document.Anchors[1]反映第二個錨的有關信息。
五、範例
範例1:一個動態文字滾動的例子。
test5_1.htm
<html> <head> <title></title> <script LANGUAGE="JavaScript"> with (top.window.location) {baseURL = href.substring (0,href.lastIndexOf ("/") + 1)} total_toc_items = 0; current_overID = ""; last_overID = ""; browser = navigator.appName; version = parseInt(navigator.appVersion); client=null; loaded = 0; if (browser == "Netscape" && version >= 3) client = "ns3"; function toc_item (img_name,icon_col,width,height) { if (client =="ns3") { img_prefix = baseURL + img_name; this.icon_col = icon_col; this.toc_img_off = new Image (width,height); this.toc_img_off.src = img_prefix + "_off.gif"; this.toc_img_on = new Image (width,height); this.toc_img_on.src = img_prefix + "_on.gif"; } } function new_toc_item (img_name,icon_row,width,height) { toc_item [img_name] = new toc_item (img_name,icon_row,width,height); } function toc_mouseover (itemID) { if (client =="ns3") { current_overID = itemID; if (current_overID != last_overID) { document [current_overID].src = toc_item [current_overID].toc_img_on.src; if (last_overID != "") { document.images [last_overID].src = toc_item[last_overID].toc_img_off.src; } last_overID = current_overID; } } } function toc_mouseout () { if (client =="ns3") { if (current_overID != "") { document.images [current_overID].src = toc_item [current_overID].toc_img_off.src; } current_overID = ""; last_overID = ""; } } new_toc_item ("1",2,120,20); <!-- Begin function bannerObject(p){ this.msg = MESSAGE this.out = " " this.pos = POSITION this.delay = DELAY this.i = 0 this.reset = clearMessage} function clearMessage(){ this.pos = POSITION} var POSITION = 50; var DELAY = 150; var MESSAGE = "這是一個動態JavaScript文字顯示的例子"; var scroll = new bannerObject(); function scroller(){ scroll.out += " "; if(scroll.pos>0) for (scroll.i = 0; scroll.i < scroll.pos; scroll.i++) { scroll.out +=" " ; } if (scroll.pos>= 0) scroll.out += scroll.msg else scroll.out = scroll.msg.substring(-scroll.pos,scroll.msg.length) document.noticeForm.notice.value = scroll.out scroll.out = " "; scroll.pos--; scroll.pos--; if (scroll.pos < -(scroll.msg.length)) { scroll.reset(); } setTimeout ('scroller()',scroll.delay);} </script> </head> <body onload="scroller()" bgcolor="#000000" link="#C0C0C0" vlink="#C0C0C0" alink="#008080" text="#C0C0C0"> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><form NAME="noticeForm"> <p><input TYPE="text" name="notice" size="40" style="background-color: rgb(192,192,192)"></p> </form> </td> </tr> </table> </center></div> </body> </html> |
範例2:顏色變化的例子。
test5_2.htm
<html> <head> <script> <!-- function makearray(n) { this.length = n; for(var i = 1; i <= n; i++) this[i] = 0; return this;} hexa = new makearray(16); for(var i = 0; i < 10; i++) hexa[i] = i; hexa[10]="a"; hexa[11]="b"; hexa[12]="c"; hexa[13]="d"; hexa[14]="e"; hexa[15]="f"; function hex(i) { if (i < 0) return "00"; else if (i > 255) return "ff"; else return "" + hexa[Math.floor(i/16)] + hexa[i%16];} function setbgColor(r, g, b) { var hr = hex(r); var hg = hex(g); var hb = hex(b); document.bgColor = "#"+hr+hg+hb;} function fade(sr, sg, sb, er, eg, eb, step) { for(var i = 0; i <= step; i++) { setbgColor( Math.floor(sr * ((step-i)/step) + er * (i/step)), Math.floor(sg * ((step-i)/step) + eg * (i/step)), Math.floor(sb * ((step-i)/step) + eb * (i/step))); }} function fadein() { fade(255,0,0,0,0,255,100); fade(0,0,255,0,255,0,100); fade(0,255,0, 0,0,0, 100);} fadein(); // --> </script> <body> </body> </html> |
本講介紹了用戶自行創建對象的方法, 用戶可根據需要創建自己的對象。並介紹了JavaScript中建數組的方法。
JavaScript對象系統的使用 (李曉華 2001年04月29日 01:50) 使用瀏覽器的內部對象系統, 可實現與HTML文檔進行交互。它的作用是將相關元素組織包裝起來,提供給程序設計人員使用,從而減輕編程人的勞動,提高設計Web頁面的能力。 一、瀏覽器對象層次及其主要作用 除了前面提到過的文檔document對象外,Navigator瀏覽器中還提供了窗口(Window)對象以及歷史(History)和位置(Location)對象。 瀏覽器對象(Navigator) 提供有關瀏覽器的信息 窗口對象(Windows) Window對象處於對象層次的最頂端,它提供了處理Navigator窗口的方法和屬性。 位置對象(Location) Location對象提供了與當前打開的URL一起工作的方法和屬性,它是一個靜態的對象。 歷史對象(History) History對象提供了與歷史清單有關的信息。 文檔對象(Document) document對象包含了與文檔元素(elements)一起工作的對象,它將這些元素封裝起來供編程人員使用。 編程人員利用這些對象,可以對WWW瀏覽器環境中的事件進行控制並作出處理。在JavaScript中提供了非常豐富的內部方法和屬性,從而減輕了編程人員的工作,提高編程效率。這正是基於對象與面向對象的根本區別所在。在這些對象系統中,文檔對象屬於非常重要的,它位於最低層,但對於我們實現Web頁面信息交互起作關鍵作用。因而它是對象系統的核心部分。 二、文檔對象功能及其作用 在Navigator瀏覽器中,document文檔對象是核心是,同時也是最重要的。見表6-1所示。
從表6-1中可以看出,document對象的主要作用就是把這些基本的元素(如links,anchor等)包裝起來,提供給編程人員使用。從另一個角度看,document對象中又是由屬性和方法組成。 1、document中三個主要的對象 在document中主要有:links,anchor,form等三個最重要的對象: (1)anchor錨對象: anchor對象指的是<A Name=...> </A>標識在HTML源碼中存在時產生的對象。它包含着文檔中所有的anchors信息。 (2)鏈接links對象 link對象指的是用<A Href=...> </A>標記的連接一個超文本或超媒體的元素作爲一個特定的URL。 (3)窗體(Form)對象 窗體對象是文檔對象的一個元素,它含有多種格式的對象儲存信息,使用它可以在JavaScript腳本中編寫程序進行文字輸入,並可以用來動態改變文檔的行爲。通過document. Forms[]數組來使得在同一個頁面上可以有多個相同的窗體,使用forms[]數組要比使用窗體名字要方便得多。 例:下面就是一個使用窗體數組和窗體名字的例子。該程序使得兩個窗體中的字段內容保持一致。 Test6_1.htm
2、文檔對象中的attribute屬性 document對象中的attribute屬性,主要用於在引用Href標識時,控制着有關顏色的格式和有關文檔標題、文檔原文件的URL以及文檔最後更新的日期。這部分元素的主要含義如下: (1)鏈接顏色:alinkcolor 這個元素主要用於,當選取一個鏈接時,鏈接對象本身的顏色就按alinkcolo r指定改變。 (2)鏈接顏色:linkcolor 當用戶使用<A Href=...> Text string </A>鏈接後,Textstring的顏色就會按Linkcolor所指定的顏色更新。 (3)瀏覽過後的顏色:VlinkColor 該屬性表示的是已被瀏覽存儲爲已瀏覽過的鏈接顏色。 (4)背景顏色:bgcolor 該元素包含文檔背景的顏色。 (5)前景顏色:Fgcolor 該元素包含HTML文檔中文本的前景顏色。 3、文檔對象的基本元素 (1)窗體屬性: 窗體屬性是與HTML文檔中<Form>...</Form>相對應的一組對象在HTML文檔所創建的窗體數,由length指定。通過document.forms.length反映該文檔中所創建的窗體數目。 (2)錨屬性:anchors 該屬性中,包含了HTML文檔的所有<A> </A>標記爲Name=...的語句標識。所有“錨”的數目保存在document.anchors.length中。 (3)鏈接屬性:links 鏈接屬性是指在文檔中<A>...</A>的由Href=...指定的數目,其鏈接數目保存在document.links.length中。 三、範例 例1:下面我們通過一個例子來說明文檔對象的綜合應用。輸出結果見圖6-2所示。 Test6_2.htm
例子2:下列程序隨機產生每日一語。 test6_3.html
本講主要介紹了JavaScript對象系統的使用方法,其中重點介紹了文檔對象及使用。 JavaScript窗口及輸入輸出
其中window.prompt()就是一個窗口對象的方法,其基本作用是,當裝入Web頁面時在屏幕上顯示一個具有“確定”和“取消”的對話框,讓你輸出數據。document.writle是一個文檔對象的方法,它的基本功能,是實現Web頁面的輸出顯示。見圖1所示。
從上面程序可以看出:
在瀏覽器中的結果,見圖2所示。
輸出結果見圖1所示。
輸出結果見圖2所示。 用JavaScript實現更復雜的交互
以上HTML標識將屏幕分成三個框架。先將窗口分成以二行爲單位的窗口,之後再按分成二個窗口。並在相應的框架中放入自己的HTML文檔。 通過[Framset ]告訴瀏覽器您要設置幾個框架;rows這項參數告訴瀏覽器您想將視窗分割成幾列;而 cols這項參數是告訴瀏覽器您想將視窗分割成幾行。 可以用很多組的 <frameset...> tags 將視窗分割得更復雜。 可以給每個frame一個"名字" (name)。frame的名字在JavaScript語法中的地位非常重要。 可以用 <src> 告訴瀏覽器您要載入哪一個 HTML文件。 二、如何訪問框架 在前面我們介紹過使用document.forms[]實現單一窗體中不同元素的訪問。而要實現框架中多窗體的不同元素的訪問,則必須使用window對象中的Frames屬性。Frames屬性同樣也是一個數組,他在 父框架集中爲每一個子框架設有一項。通過下標實現不同框架的訪問: parent.frames[Index1].docuement.forms[index2] 通過parent.frames.length確定窗口中窗體的數目。 除了使用數組下標來訪問窗體外還可以使用框架名和窗體名來實現各元素的訪: parent.framesName.decument.formNames.elementName.(m/p) 三、範例 下面我們通過一個具體的實例, 來說明利用JavaScript腳本在WEB中實現更爲複雜的信息交互。該例子是在一個多窗口中實現窗體信息的動態交互,在程序中首先在瀏覽器窗口中製作三個用於窗體交互的窗口,每個窗體窗口實現不同信息的動態交互。 tset9.html爲主調用文檔它首先將窗口劃分爲具有二行的窗體,爾後再將第二行的窗體劃分爲具有二列的窗體; test9-1.html爲顯示標題文檔; test9_2.html爲第二框架文檔其中需要注意的是: 通過JavaScript腳本將所示的“雲南省”和“四川省”分別改爲“昆明市”和“成都市”; test7_3.html爲第三框架文檔。 主調文檔 主要作用是將窗口劃分爲具有二行的窗體,爾後再將第二行的窗體劃分爲具有二列的窗體。 Test9.htm
第二個框架 主要作用是實現交互。可以通過JavaScript腳本將所示的“雲南省”和“四川省”分別改爲“昆明市”和“成都市”。 Test9_2.htm
第三個框架 主要作用是實現交互。 Test9_3.htm
圖 9-2 在瀏覽器中結果 本講介紹框架中的基本元素的主要功能和使用,利用JavaScript腳本可以非常方便、靈活地實現Web頁面更爲複雜的信息交互,這是HTML標識語言所不能具備的。從中可以看出JavaScript是多麼的吸引衆多的Web設計人員。 |