最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
包含javascript歷史的詞條

module里面可以寫webworker

可以。

創(chuàng)新互聯(lián)建站長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為陽(yáng)朔企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)陽(yáng)朔網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

WebWorkers使得一個(gè)Web應(yīng)用程序可以在與主執(zhí)行線程分離的后臺(tái)線程中運(yùn)行一個(gè)腳本操作。這樣做的好處是可以在一個(gè)單獨(dú)的線程中執(zhí)行費(fèi)時(shí)的處理任務(wù),從而允許主(通常是UI)線程運(yùn)行而不被阻塞。它的作用就是給JS創(chuàng)造多線程運(yùn)行環(huán)境,允許主線程創(chuàng)建worker線程,分配任務(wù)給后者,主線程運(yùn)行的同時(shí)worker線程也在運(yùn)行,相互不干擾,在worker線程運(yùn)行結(jié)束后把結(jié)果返回給主線程。這樣做的好處是主線程可以把計(jì)算密集型或高延遲的任務(wù)交給worker線程執(zhí)行,這樣主線程就會(huì)變得輕松,不會(huì)被阻塞或拖慢。這并不意味著JS語(yǔ)言本身支持了多線程能力,而是瀏覽器作為宿主環(huán)境提供了JS一個(gè)多線程運(yùn)行的環(huán)境。

JavaScript是單線程的(幫助理解單線程)。一些復(fù)雜而又耗時(shí)的操作,勢(shì)必會(huì)阻塞頁(yè)面的渲染/交互,影響用戶體驗(yàn)。webworker允許開發(fā)者為頁(yè)面額外開啟一個(gè)線程,用來(lái)處理復(fù)雜而耗時(shí)的操作,不會(huì)阻塞主線程,從而達(dá)到優(yōu)化用戶體驗(yàn)的目的。歷史上,JavaScript一直沒有模塊(module)體系,無(wú)法將一個(gè)大程序拆分成互相依賴的小文件,再用簡(jiǎn)單的方法拼裝起來(lái)。其他語(yǔ)言都有這項(xiàng)功能,比如Ruby的require、Python的import,但是JavaScript任何這方面的支持都沒有,這對(duì)開發(fā)大型的、復(fù)雜的項(xiàng)目形成了巨大障礙。

javascript什么意思?

JavaScript簡(jiǎn)介:

Javacript是一種能讓你的網(wǎng)頁(yè)更加生動(dòng)活潑的程式語(yǔ)言,也是目前網(wǎng)頁(yè)中設(shè)計(jì)中最容易學(xué)又最方便的語(yǔ)言。你可以利用Javacript輕易的做出親切的歡迎訊息、漂亮的數(shù)字鐘、有廣告效果的跑馬燈及簡(jiǎn)易的選舉,還可以顯示瀏覽器停留的時(shí)間。讓這些特殊效果提高網(wǎng)頁(yè)的互動(dòng)性、提供親切的服務(wù)。

由來(lái)

談到JavaScript的歷史,首先就得介紹[網(wǎng)景](Netscape)這家公司,相信很多人使用過(guò)Netscape瀏覽器來(lái)瀏覽網(wǎng)頁(yè),這家公司在設(shè)計(jì)瀏覽器的時(shí)候,一方面為了輔助本身發(fā)展的一種名為L(zhǎng)iveWire的程式,另一方面為了提高網(wǎng)頁(yè)設(shè)計(jì)的互動(dòng)性,所以發(fā)展了LiveScript這個(gè)電腦語(yǔ)言。

那JavaScript和LiveScript有什么關(guān)系呢?在Netscape發(fā)展LiveScript的同時(shí),另一家名為[升陽(yáng)](Sun)的公司也正在發(fā)展Java語(yǔ)言,為了輔助Java的網(wǎng)頁(yè)程式方面的設(shè)計(jì),所以這兩家公司進(jìn)行合作,共同發(fā)展LiveScript語(yǔ)言,并且將LiveScript語(yǔ)言改名為Javacript,這就是Javacript的由來(lái)。

JavaScript剛開始時(shí)僅應(yīng)用在Netscape瀏覽器,不過(guò)隨著使用JavaScript制作網(wǎng)頁(yè)的人愈來(lái)愈多,微軟的IE瀏覽器也提供了新功能,現(xiàn)在可以在IE瀏覽器上看到JavaScript的效果了。

JavaScript和Java的差別

JavaScript和Java的差別究竟在哪兒呢?雖然名稱很相似,而且都是在Internet和WWW盛行之下,所發(fā)展出為的兩種提供網(wǎng)頁(yè)程式設(shè)計(jì)的語(yǔ)言,但是卻有很大的差異。前面介紹過(guò)JavaScript的前身是網(wǎng)景(Netscape)公司發(fā)展的Live Script語(yǔ)言,直到和升陽(yáng)(Sun)公司合作之后,才改名為JavaScript,而Java也是由升陽(yáng)公司發(fā)展出來(lái)的,所以名字才會(huì)這么相似。盡管如此,JavaScript和Java仍然是不同的語(yǔ)言。我們整理出以下四點(diǎn)幫助你了解兩者的差異:

1、JavaScript是一種象文件一樣的描述語(yǔ)言,透過(guò)瀏覽器就可以直接執(zhí)行;而Java像正統(tǒng)的程式語(yǔ)言(如C/C++)一樣,必須先進(jìn)行編繹和連結(jié)等動(dòng)作才可執(zhí)行。

2、JavaScript必須編寫在HTML文件中,直接查看網(wǎng)頁(yè)的原始碼,就可以看到JavaScript程式,所以沒有保護(hù),任何人都可以透過(guò)HTML文件復(fù)制程式;而Java應(yīng)用在網(wǎng)頁(yè)的程式稱為Java Applet(Applet是[小程式]的意思),是和HTML文件分開的。

3、JavaScript的結(jié)構(gòu)較為自由松散,譬如,程式中使用的變數(shù)前并不是需要明確的定義,而Java和正統(tǒng)的程式語(yǔ)言一樣,結(jié)構(gòu)較為嚴(yán)謹(jǐn)。

4、JavaScript不具有讀寫檔案及網(wǎng)絡(luò)控制等功能,Java則有提供這些功能,但是JavaScript在網(wǎng)頁(yè)內(nèi)容的控制和互動(dòng)性方面,可算是最方便快捷的。

JavaScript的功能

顯示信息提示

許多網(wǎng)站在你一連上時(shí),畫面上會(huì)先出現(xiàn)一個(gè)歡迎訊息對(duì)話盒,不但和你打招呼,還會(huì)發(fā)布一些重要訊息

顯示日期時(shí)間

某些網(wǎng)頁(yè)會(huì)顯示目前的日期和時(shí)間,可能你會(huì)覺得有點(diǎn)神奇,怎么瀏覽器會(huì)知道目前的時(shí)間呢?這也是JavaScript提供的功能,它可以偵測(cè)你的電腦目前的時(shí)間,并且顯示在網(wǎng)頁(yè)中。

顯示更新日期

許多網(wǎng)頁(yè)會(huì)公告最新更新日期讓大家知道,Java Scirpt可以自動(dòng)偵測(cè)網(wǎng)頁(yè)修改的日期,讓你省去在每次修改網(wǎng)頁(yè)時(shí)就得修改日期的動(dòng)作。

跑馬燈文字

讓你可以方便顯示較長(zhǎng)的訊息,又不占去大塊的版面空間。

按鈕變化效果

當(dāng)你移動(dòng)滑鼠游到左邊的按鈕上時(shí),按鈕便會(huì)變成色,在瀏覽器下方狀態(tài)列上也會(huì)顯示出相關(guān)文字,這也是利用JavaScript制作的動(dòng)態(tài)效果。

文章出處:

javascript的歷史

它最初由Netscape的Brendan Eich設(shè)計(jì)。JavaScript是甲骨文公司的注冊(cè)商標(biāo)。Ecma國(guó)際以JavaScript為基礎(chǔ)制定了ECMAScript標(biāo)準(zhǔn)。JavaScript也可以用于其他場(chǎng)合,如服務(wù)器端編程。完整的JavaScript實(shí)現(xiàn)包含三個(gè)部分:ECMAScript,文檔對(duì)象模型,瀏覽器對(duì)象模型。

Netscape在最初將其腳本語(yǔ)言命名為L(zhǎng)iveScript,后來(lái)Netscape在與Sun合作之后將其改名為JavaScript。JavaScript最初受Java啟發(fā)而開始設(shè)計(jì)的,目的之一就是“看上去像Java”,因此語(yǔ)法上有類似之處,一些名稱和命名規(guī)范也借自Java。但JavaScript的主要設(shè)計(jì)原則源自Self和Scheme。JavaScript與Java名稱上的近似,是當(dāng)時(shí)Netscape為了營(yíng)銷考慮與Sun微系統(tǒng)達(dá)成協(xié)議的結(jié)果。為了取得技術(shù)優(yōu)勢(shì),微軟推出了JScript來(lái)迎戰(zhàn)JavaScript的腳本語(yǔ)言。為了互用性,Ecma國(guó)際(前身為歐洲計(jì)算機(jī)制造商協(xié)會(huì))創(chuàng)建了ECMA-262標(biāo)準(zhǔn)(ECMAScript)。兩者都屬于ECMAScript的實(shí)現(xiàn)。盡管JavaScript作為給非程序人員的腳本語(yǔ)言,而非作為給程序人員的腳本語(yǔ)言來(lái)推廣和宣傳,但是JavaScript具有非常豐富的特性。

發(fā)展初期,JavaScript的標(biāo)準(zhǔn)并未確定,同期有Netscape的JavaScript,微軟的JScript和CEnvi的ScriptEase三足鼎立。1997年,在ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))的協(xié)調(diào)下,由Netscape、Sun、微軟、Borland組成的工作組確定統(tǒng)一標(biāo)準(zhǔn):ECMA-262。

JavaScript清除歷史記錄的一點(diǎn)問題

1.不要做任何假設(shè)

(JavaScript是一個(gè)不可靠的助手)

可能不唐突的JavaScript 的最重要的一個(gè)特性就是——你要停止任何假設(shè):

* 不要假設(shè)JavaScript是可用的,你最好認(rèn)為它很有可能是不可用的,而不是直接依賴于它。

* 在你經(jīng)過(guò)測(cè)試確認(rèn)一些方法和屬性可以使用之前,不要假設(shè)瀏覽器支持它們。

* 不要假設(shè)HTML代碼如你想象的那樣正確,每次都要進(jìn)行檢查,并且當(dāng)其不可用的時(shí)候就什么也不要做。

* 讓JavaScript的功能獨(dú)立于輸入設(shè)備

* 要記住其他的腳本可能會(huì)影響你的JavaScript的功能,所以要保證你的腳本的作用域盡可能地安全。

在開始設(shè)計(jì)你的腳本之前,要考慮的第一件事情就是檢查一下你要為其編寫腳本的HTML代碼,看看有什么東西可以幫助你達(dá)到目的。

2.找出鉤子和節(jié)點(diǎn)關(guān)系

(HTML是腳本的基石)

在開始編寫腳本之前,要先看一下你要為之編寫JavaScript的HTML。如果HTML是未經(jīng)組織的或者未知的,那么你幾乎不可能有一個(gè)好的腳本編寫方案——很可能就會(huì)出現(xiàn)下面的情況:要么是會(huì)用JavaScript創(chuàng)建太多標(biāo)記,要么就是應(yīng)用太依賴于JavaScript。

在HTML中有一些東西需要考慮,那就是鉤子和節(jié)點(diǎn)關(guān)系。

1.HTML 鉤子

HTML最初的和最重要的鉤子就是ID,而且ID可以通過(guò)最快的DOM方法——getElementById 訪問到。如果在一個(gè)有效的HTML文檔中所有的ID都是獨(dú)一無(wú)二的話(在IE中關(guān)于name 和 ID 有一個(gè)bug,不過(guò)有些好的類庫(kù)解決了這個(gè)問題),使用ID就是安全可靠的,并且易于測(cè)試。

其他一些鉤子就是是HTML元素和CSS類,HTML元素可以通過(guò)getElementsByTagName方法訪問,而在多數(shù)瀏覽器中都還不能通過(guò)原生的DOM方法來(lái)訪問CSS類。不過(guò),有很多外部類庫(kù)提供了可以訪問CSS類名(類似于 getElementsByClassName) 的方法。

2.HTML 節(jié)點(diǎn)關(guān)系

關(guān)于HTML的另外比較有意思的一點(diǎn)就是標(biāo)記之間的關(guān)系,思考下面的問題:

* 要怎樣才可以最容易地、通過(guò)最少的DOM遍歷來(lái)到達(dá)目標(biāo)節(jié)點(diǎn)?

* 通過(guò)修改什么標(biāo)記,可以盡可能多地訪問到需要修改的子節(jié)點(diǎn)?

* 一個(gè)給定的元素有什么屬性或信息可以用來(lái)到達(dá)另外一個(gè)元素?

遍歷DOM很耗資源而且速度很慢,這就是為什么要盡量使用瀏覽器中已經(jīng)在使用的技術(shù)來(lái)做這件事情。

3.把遍歷交給專家來(lái)做

(CSS,更快地遍歷DOM)

有關(guān)DOM的腳本和使用方法或?qū)傩裕╣etElementsByTagName, nextSibling, previousSibling, parentNode以及其它)來(lái)遍歷DOM似乎迷惑了很多人,這點(diǎn)很有意思。而有趣的是,我們其實(shí)早已經(jīng)通過(guò)另外一種技術(shù)—— CSS ——做了這些事情。

CSS 是這樣一種技術(shù),它使用CSS選擇器,通過(guò)遍歷DOM來(lái)訪問目標(biāo)元素并改變它們的視覺屬性。一段復(fù)雜的使用DOM的JavaScript可以用一個(gè)CSS選擇器取代:

Java代碼 var n = document.getElementById('nav'); if(n){ var as = n.getElementsByTagName('a'); if(as.length 0){ for(var i=0;as[i];i++){ as[i].style.color = ‘#369′; as[i].style.textDecoration = ‘none’; } } } /* 下面的代碼與上面功能一樣 */ #nav a{ color:#369; text-decoration:none; } var n = document.getElementById('nav'); if(n){ var as = n.getElementsByTagName('a'); if(as.length 0){ for(var i=0;as[i];i++){ as[i].style.color = ‘#369′; as[i].style.textDecoration = ‘none’; } } } /* 下面的代碼與上面功能一樣 */ #nav a{ color:#369; text-decoration:none; }

這是一個(gè)可以好好利用的很強(qiáng)大的技巧。你可以通過(guò)動(dòng)態(tài)為DOM中高層的元素添加class 或者更改元素ID來(lái)實(shí)現(xiàn)這一點(diǎn)。如果你使用DOM為文檔的body添加了一個(gè)CSS類,那么設(shè)計(jì)師就很可以容易地定義文檔的靜態(tài)版本和動(dòng)態(tài)版本。

Java代碼 JavaScript: var dynamicClass = 'js'; var b = document.body; b.className = b.className ? b.className + ' js' : 'js'; CSS: /* 靜態(tài)版本 */ #nav { .... } /* 動(dòng)態(tài)版本 */ body.js #nav { .... } JavaScript: var dynamicClass = 'js'; var b = document.body; b.className = b.className ? b.className + ' js' : 'js'; CSS: /* 靜態(tài)版本 */ #nav { .... } /* 動(dòng)態(tài)版本 */ body.js #nav { .... }

4.理解瀏覽器和用戶

(在既有的使用模式上創(chuàng)建你所需要的東西)

不唐突的JavaScript 中很重要的一部分就是理解瀏覽器是如何工作的(尤其是瀏覽器是如何崩潰的)以及用戶期望的是什么。不考慮瀏覽器你也可以很容易地使用JavaScript 創(chuàng)建一個(gè)完全不同的界面。拖拽界面,折疊區(qū)域,滾動(dòng)條和滑動(dòng)塊都可以使用JavaScript創(chuàng)建,但是這個(gè)問題并不是個(gè)簡(jiǎn)單的技術(shù)問題,你需要思考下面的問題:

* 這個(gè)新界面可以獨(dú)立于輸入設(shè)備么?如果不能,那么可以依賴哪些東西?

* 我創(chuàng)建的這個(gè)新界面是否遵循了瀏覽器或者其它富界面的準(zhǔn)則(你可以通過(guò)鼠標(biāo)在多級(jí)菜單中直接切換嗎?還是需要使用tab鍵?)

* 我需要提供什么功能但是這個(gè)功能是依賴于JavaScript的?

最后一個(gè)問題其實(shí)不是問題,因?yàn)槿绻枰憔涂梢允褂肈OM來(lái)憑空創(chuàng)建HTML。關(guān)于這點(diǎn)的一個(gè)例子就是“打印”鏈接,由于瀏覽器沒有提供一個(gè)非 JavaScript的打印文檔功能,所以你需要使用DOM來(lái)創(chuàng)建這類鏈接。同樣地,一個(gè)實(shí)現(xiàn)了展開和收縮內(nèi)容模塊的、可以點(diǎn)擊的標(biāo)題欄也屬于這種情況。標(biāo)題欄不能被鍵盤激活,但是鏈接可以。所以為了創(chuàng)建一個(gè)可以點(diǎn)擊的標(biāo)題欄你需要使用JavaScript將鏈接加入進(jìn)去,然后所有使用鍵盤的用戶就可以收縮和展開內(nèi)容模塊了。

解決這類問題的極好的資源就是設(shè)計(jì)模式庫(kù)。至于要知道瀏覽器中的哪些東西是獨(dú)立于輸入設(shè)備的,那就要靠經(jīng)驗(yàn)的積累了。首先你要理解的就是事件處理機(jī)制。

5.理解事件

(事件處理會(huì)引起改變)

事件處理是走向不唐突的JavaScript的第二步。重點(diǎn)不是讓所有的東西都變得可以拖拽、可以點(diǎn)擊或者為它們添加內(nèi)聯(lián)處理,而是理解事件處理是一個(gè)可以完全分離出來(lái)的東西。我們已經(jīng)將HTML,CSS和JavaScript分離開來(lái),但是在事件處理的分離方面卻沒有走得很遠(yuǎn)。

事件處理器會(huì)監(jiān)聽發(fā)生在文檔中元素上的變化,如果有事件發(fā)生,處理器就會(huì)找到一個(gè)很奇妙的對(duì)象(一般會(huì)是一個(gè)名為e的參數(shù)),這個(gè)對(duì)象會(huì)告訴元素發(fā)生了什么以及可以用它做什么。

對(duì)于大多數(shù)事件處理來(lái)說(shuō),真正有趣的是它不止發(fā)生在你想要訪問的元素上,還會(huì)在DOM中較高層級(jí)的所有元素上發(fā)生(但是并不是所有的事件都是這樣,focus和blur事件是例外)。舉例來(lái)說(shuō),利用這個(gè)特性你可以為一個(gè)導(dǎo)航列表只添加一個(gè)事件處理器,并且使用事件處理器的方法來(lái)獲取真正觸發(fā)事件的元素。這種技術(shù)叫做事件委托,它有幾點(diǎn)好處:

* 你只需要檢查一個(gè)元素是否存在,而不需要檢查每個(gè)元素

* 你可以動(dòng)態(tài)地添加或者刪除子節(jié)點(diǎn)而并不需要?jiǎng)h除相應(yīng)的事件處理器

* 你可以在不同的元素上對(duì)相同的事件做出響應(yīng)

需要記住的另一件事是,在事件向父元素傳播的時(shí)候你可以停止它而且你可以覆寫掉HTML元素(比如鏈接)的缺省行為。不過(guò),有時(shí)候這并不是個(gè)好主意,因?yàn)闉g覽器賦予HTML元素那些行為是有原因的。舉個(gè)例子,鏈接可能會(huì)指向頁(yè)面內(nèi)的某個(gè)目標(biāo),不去修改它們能確保用戶可以將頁(yè)面當(dāng)前的腳本狀態(tài)也加入書簽。

6.為他人著想

(命名空間,作用域和模式)

你的代碼幾乎從來(lái)不會(huì)是文檔中的唯一的腳本代碼。所以保證你的代碼里沒有其它腳本可以覆蓋的全局函數(shù)或者全局變量就顯得尤為重要。有一些可用的模式可以來(lái)避免這個(gè)問題,最基礎(chǔ)的一點(diǎn)就是要使用 var 關(guān)鍵字來(lái)初始化所有的變量。假設(shè)我們編寫了下面的腳本:

Java代碼 var nav = document.getElementById('nav'); function init(){ // do stuff } function show(){ // do stuff } function reset(){ // do stuff } var nav = document.getElementById('nav'); function init(){ // do stuff } function show(){ // do stuff } function reset(){ // do stuff }

上面的代碼中包含了一個(gè)叫做nav的全局變量和名字分別為 init,show 和 reset 的三個(gè)函數(shù)。這些函數(shù)都可以訪問到nav這個(gè)變量并且可以通過(guò)函數(shù)名互相訪問:

Java代碼 var nav = document.getElementById('nav'); function init(){ show(); if(nav.className === 'show'){ reset(); } // do stuff } function show(){ var c = nav.className; // do stuff } function reset(){ // do stuff } var nav = document.getElementById('nav'); function init(){ show(); if(nav.className === 'show'){ reset(); } // do stuff } function show(){ var c = nav.className; // do stuff } function reset(){ // do stuff }

你可以將代碼封裝到一個(gè)對(duì)象中來(lái)避免上面的那種全局式編碼,這樣就可以將函數(shù)變成對(duì)象中的方法,將全局變量變成對(duì)象中的屬性。 你需要使用“名字+冒號(hào)”的方式來(lái)定義方法和屬性,并且需要在每個(gè)屬性或方法后面加上逗號(hào)作為分割符。

Java代碼 var myScript = { nav:document.getElementById('nav'), init:function(){ // do stuff }, show:function(){ // do stuff }, reset:function(){ // do stuff } } var myScript = { nav:document.getElementById('nav'), init:function(){ // do stuff }, show:function(){ // do stuff }, reset:function(){ // do stuff } }

所有的方法和屬性都可以通過(guò)使用“類名+點(diǎn)操作符”的方式從外部和內(nèi)部訪問到。

Java代碼 var myScript = { nav:document.getElementById('nav'), init:function(){ myScript.show(); if(myScript.nav.className === 'show'){ myScript.reset(); } // do stuff }, show:function(){ var c = myScript.nav.className; // do stuff }, reset:function(){ // do stuff } } var myScript = { nav:document.getElementById('nav'), init:function(){ myScript.show(); if(myScript.nav.className === 'show'){ myScript.reset(); } // do stuff }, show:function(){ var c = myScript.nav.className; // do stuff }, reset:function(){ // do stuff } }

這種模式的缺點(diǎn)就是,你每次從一個(gè)方法中訪問其它方法或?qū)傩远急仨氃谇懊婕由蠈?duì)象的名字,而且對(duì)象中的所有東西都是可以從外部訪問的。如果你只是想要部分代碼可以被文檔中的其他腳本訪問,可以考慮下面的模塊(module)模式:

Java代碼 var myScript = function(){ //這些都是私有方法和屬性 var nav = document.getElementById('nav'); function init(){ // do stuff } function show(){ // do stuff } function reset(){ // do stuff } //公有的方法和屬性被使用對(duì)象語(yǔ)法包裝在return 語(yǔ)句里面 return { public:function(){ }, foo:'bar' } }(); var myScript = function(){ //這些都是私有方法和屬性 var nav = document.getElementById('nav'); function init(){ // do stuff } function show(){ // do stuff } function reset(){ // do stuff } //公有的方法和屬性被使用對(duì)象語(yǔ)法包裝在return 語(yǔ)句里面 return { public:function(){ }, foo:'bar' } }();

你可以使用和前面的代碼同樣的方式訪問返回的公有的屬性和方法,在本示例中可以這么訪問:myScript.public() 和 myScript.foo 。但是這里還有一點(diǎn)讓人覺得不舒服:當(dāng)你想要從外部或者從內(nèi)部的一個(gè)私有方法中訪問公有方法的時(shí)候,還是要寫一個(gè)冗長(zhǎng)的名字(對(duì)象的名字可以非常長(zhǎng))。為了避免這一點(diǎn),你需要將它們定義為私有的并且在return語(yǔ)句中只返回一個(gè)別名:

Java代碼 var myScript = function(){ // 這些都是私有方法和屬性 var nav = document.getElementById('nav'); function init(){ // do stuff } function show(){ // do stuff // do stuff } function reset(){ // do stuff } var foo = 'bar'; function public(){ } var myScript = function(){ // 這些都是私有方法和屬性 var nav = document.getElementById('nav'); function init(){ // do stuff } function show(){ // do stuff // do stuff } function reset(){ // do stuff } var foo = 'bar'; function public(){ }

//只返回指向那些你想要訪問的私有方法和屬性的指針

Java代碼 return { public:public, foo:foo } }(); return { public:public, foo:foo } }();

這就保證了代碼風(fēng)格一致性,并且你可以使用短一點(diǎn)的別名來(lái)訪問其中的方法或?qū)傩浴?/p>

如果你不想對(duì)外部暴露任何的方法或?qū)傩裕憧梢詫⑺械拇a封裝到一個(gè)匿名方法中,并在它的定義結(jié)束后立刻執(zhí)行它:

Java代碼 (function(){ // these are all private methods and properties var nav = document.getElementById('nav'); function init(){ // do stuff show(); // 這里不需要類名前綴 } function show(){ // do stuff } function reset(){ // do stuff } })(); (function(){ // these are all private methods and properties var nav = document.getElementById('nav'); function init(){ // do stuff show(); // 這里不需要類名前綴 } function show(){ // do stuff } function reset(){ // do stuff } })();

對(duì)于那些只執(zhí)行一次并且對(duì)其它函數(shù)沒有依賴的代碼模塊來(lái)說(shuō),這種模式非常好。

通過(guò)遵循上面的那些規(guī)則,你的代碼更好地為用戶工作,也可以使你的代碼在機(jī)器上更好地運(yùn)行并與其他開發(fā)者的代碼和睦相處。不過(guò),還有一個(gè)群體需要考慮到。

7.為接手的開發(fā)者考慮

(使維護(hù)更加容易)

使你的腳本真正地unobtrusive的最后一步是在編寫完代碼之后仔細(xì)檢查一遍,并且要照顧到一旦腳本上線之后要接手你的代碼的開發(fā)者。考慮下面的問題:

* 所有的變量和函數(shù)名字是否合理并且易于理解?

* 代碼是否經(jīng)過(guò)了合理的組織?從頭到尾都很流暢嗎?

* 所有的依賴都顯而易見嗎?

* 在那些可能引起混淆的地方都添加了注釋嗎?

最重要的一點(diǎn)是:要認(rèn)識(shí)到文檔中的HTML和CSS代碼相對(duì)于JavaScript來(lái)說(shuō)更有可能被改變(因?yàn)樗鼈冐?fù)責(zé)視覺效果)。所以不要在腳本代碼中包含任何可以讓終端用戶看到的class和ID,而是要將它們分離出來(lái)放到一個(gè)保存配置信息的對(duì)象中。

Java代碼 myscript = function(){ var config = { navigationID:'nav', visibleClass:'show' }; var nav = document.getElementById(config.navigationID); function init(){ show(); if(nav.className === config.visibleClass){ reset(); }; // do stuff }; function show(){ var c = nav.className; // do stuff }; function reset(){ // do stuff }; }(); myscript = function(){ var config = { navigationID:'nav', visibleClass:'show' }; var nav = document.getElementById(config.navigationID); function init(){ show(); if(nav.className === config.visibleClass){ reset(); }; // do stuff }; function show(){ var c = nav.className; // do stuff }; function reset(){ // do stuff }; }();

這樣維護(hù)者就知道去哪里修改這些屬性,而不需要改動(dòng)其他代碼。


本文名稱:包含javascript歷史的詞條
本文來(lái)源:http://fisionsoft.com.cn/article/dseohoi.html