html5android課程集合advanced javascript大家去銀行取錢時(shí)首先要將存折和取款單交給工作人員核_第1頁
html5android課程集合advanced javascript大家去銀行取錢時(shí)首先要將存折和取款單交給工作人員核_第2頁
html5android課程集合advanced javascript大家去銀行取錢時(shí)首先要將存折和取款單交給工作人員核_第3頁
html5android課程集合advanced javascript大家去銀行取錢時(shí)首先要將存折和取款單交給工作人員核_第4頁
html5android課程集合advanced javascript大家去銀行取錢時(shí)首先要將存折和取款單交給工作人員核_第5頁
已閱讀5頁,還剩413頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

之外,JavaScript也 ,不過是在服務(wù)器端進(jìn)行。JavaScript是一種語言,用于開發(fā)基于第 年月 第 年月Ajax概念1的提出。其間打了第一場(chǎng)瀏覽器 ,IEVSNetscape。這兩者的DOMAPI出入很大,前端開發(fā)人員被迫改進(jìn)技術(shù),為了不想兼容某一個(gè)瀏覽器,發(fā)明UA(navigator.userAgent) 技術(shù)。這個(gè)時(shí)期的杰出代支持能在EXT看到的各種控件,如菜單、樹、表格、滑動(dòng)條、切換卡、彈出層、測(cè)量?jī)x表(使用VML實(shí)現(xiàn),現(xiàn)在又支持SVG)。其他比較著名的還有,Dojo(2004年)、Sarissa(2003年)JavaScriptRemoteScripting(2000年)。Dojo有IBM做 做,質(zhì)量有保證,被廣泛整合到各大Java框架內(nèi)(struct2、Tapestry、EclipseATF、MyFaces)。特點(diǎn)是功能無所不包,主要分為Core、Dijit、animations、JSON等相關(guān)操作API。Dijit是一個(gè)可更換皮膚,基于模板的WebUI控件庫。DojoX包括一些新穎的代碼和控件,如DateGrid、chartsJavaScriptRemoteScripting是較經(jīng)典 第2時(shí)期,Prototype“ ”,2005年~2008年。其間打了第2次瀏覽器 Firefox3大勝。瀏覽器“ ”中,Prototype積極進(jìn)行升級(jí),加入諸多DOM功能,因此,JSer比之前好過多了。加之,有rails、script.aculo.usPrototype時(shí)期,面向?qū)ο蠹夹g(shù)發(fā)展到極致,許多組件成套推出。DOM特 JavaScript文件,不 誤。比如它一個(gè)很好用的API-ge ementsByClassName,由于W3C的標(biāo)準(zhǔn)化,Prototype升級(jí)慢了,它對(duì)DOM的擴(kuò)展成為了它的“ ,2008年到現(xiàn)在200771日,jQuery1.1.3 停滯不前的Prototype已經(jīng)跟不上時(shí)代的節(jié)奏,jQuery在1.3x版本時(shí)更換Sizzle,更純凈的CSS選擇器引擎,易用性與性能大大提高,被程序員一致看好的mouseenter、mouseleave及 YUI與EXT。接著出現(xiàn)的是以類工廠為導(dǎo)向的框架,如著名的Prototype,還有 塊都是一個(gè)由類工廠衍生出來的類對(duì)象。尤其是mootoos1.3把所有類型都封裝成Type類型。不起的東西:“無new實(shí)例化”技術(shù),$(expr)就是返回一個(gè)實(shí)例,不需要顯式地new出來;getfirstsetall y-InvokedFunction第4種就是以加載器串聯(lián)起來的框架,它們都有復(fù)數(shù)個(gè)JavaScript文AMD。模塊化是JavaScript 工業(yè)化的標(biāo)志。《Unix編程藝術(shù)》列本采取這種架構(gòu),如Dojo、YUI、kissy、qwrap和mass等?,F(xiàn)在叫CanJS),backbonejs和spinejs,然后更符合前端實(shí)際的MVVM框架中,原有DOM操作被 要依據(jù)它們?cè)谥械脑创a,基本上都是一個(gè)模塊一個(gè)JavaScriptjQuery,jQuery強(qiáng)在它專注于DOM操作的思路一開始就是對(duì)的,以后龐大的插件與完善的Bug提交 的“類”。其中Enumerable只是一個(gè)普通的方法包,ObjectRange、 t則是用Class類工廠生產(chǎn)出來的。Class類 受Prototype.js影響,是最早期以命名空間為導(dǎo)向的框架的典范。覽器版本的渲染Bug、安全策略或某些BUG的修正,還是要用到瀏覽器 用到pare(anotherObject)上。這允許兩個(gè)不同的類之間建立。將一個(gè)接受類作為參數(shù)的函數(shù)可改為接受一個(gè)接口作為函數(shù)測(cè)和調(diào)試變得更加簡(jiǎn)單。在類似與JS這樣的弱類型語言中,類型匹配錯(cuò)誤非常。但使用接口就會(huì)讓這變得簡(jiǎn)單一些,因?yàn)槿绻弧3?。并?duì)系統(tǒng)性能造成影響。如果你擔(dān)心這點(diǎn),你可以在開發(fā)完成后跳過這 了所要實(shí)現(xiàn)的接口,這些被想要與這些類結(jié)合的對(duì)象檢查,接口 有它需要實(shí)現(xiàn)的某個(gè)接口,就會(huì)出現(xiàn)錯(cuò)誤。你可以利用這些錯(cuò)誤強(qiáng)迫其它程序員這些接口。它“自稱”實(shí)現(xiàn)了接口。創(chuàng)建一個(gè)了卻忘了實(shí)現(xiàn)接口的類是非常問題。當(dāng)然,顯示的類所要支持的接口無疑也增加了工作兩。用鴨子類型模擬接口,事實(shí)上,一個(gè)類是否了它所支持的接口是無關(guān)緊 。都會(huì)被使用。給你的自由去優(yōu)化和重構(gòu)你的代碼。 //ResultSet 名為execute,run,orundo),通過使用接口,你可以創(chuàng)建能夠執(zhí)行這盡管JS是一種OO語言,但是他沒有任何內(nèi)建的機(jī)制來一個(gè)成員是成的方案來創(chuàng)建包含公共,私有和方法的對(duì)象。每種方案都有優(yōu)。,這確保了你的人會(huì)用同樣的方法請(qǐng)求信息。一天,你決定要更頻繁的接受這些信息。你找到了原始數(shù)據(jù)的地點(diǎn),自己檢索并計(jì) 口中定義的存取函數(shù)和賦值函數(shù)。在現(xiàn)實(shí)世界中很少用到這些特?varbill=="BillEbill.sound=function()console.log('bahhh!' varbill=name:"BillEconsole.log('bahhh!' ;//"BillE bill['name'];//"BillE bill.sound("brrr!");//"brrr!"He'scold console.log( o"+ oBillE varsound=sound('moo!');// ) console.log( o"+ oBillE varsound=sound('moo!');// )varsally=;//" ="BillE oBillEvarsayName= "建為全局變量時(shí),當(dāng)它碰到時(shí),它會(huì)在全局查找namevarname="Bearded oBearded functionGame()varzelda=newvarsmb=newzelda.title="Legendofsmb.title="SuperMariozelda.title;//"Legendofsmb.title;//"SuperMariofunctionGame(title)this.title=typeoftitle!=='undefined'?title:varzelda=newGame("Legendofzelda.title;//"Legendofzelda.title="Ocarinaofzelda.title;//"Ocarinaofvarblank=newblank.title;//面標(biāo)準(zhǔn)的ifelse語句是一個(gè)意思。if(typeoftitle!=='undefined')this.title=}elsethis.title=}//Isthesamethis.title=typeoftitle!=='undefined'?title: console.log("Ilove"+this.titlezelda.loveTitle();//"IloveOcarinaofconsole.log("Iheart"+this.titlezelda.heartIt();//"IheartOcarinaofsmb.heartIt();//"IheartSuperMario 第 年月變量是用來臨 數(shù)值的容器。在程序,變量 的數(shù)值是可以變化的。在JavaScript中,當(dāng)網(wǎng)頁窗口被關(guān)閉以后, 變量可以包含數(shù)字、從A到Z的大寫字母第4頁變量區(qū)分大小寫 第 年月

局部變量是在一個(gè)函數(shù)中的變量,僅對(duì)該函數(shù)可用,中的其他函數(shù)都不能訪第 年月 第 年月第 年月“o空第 年月 第 年月 。第 年月+加-減/除*乘%++xxx第 年月><第 年月值!第 年月第 年月第 年月 第 年月第 年月 第 年月 第數(shù)組的開頭添加一年月多元素,并返回new。第 年月。第 年月

年月日。第 年月 第 年月頁第 年月第 年月第頁條語句的 年月第 年月第 年月;在用戶填寫信息時(shí),經(jīng)常會(huì)驗(yàn)證用戶輸入的郵箱格式和號(hào)碼是否符合特第 年月第 年月New第 年月 第 年月igm第 年月.第 年月第 年月.第 年月第 年月[a-第 年月第 年月

第 年月number第 年月第 年月第 年月

第 年月流 第 年月 。第 年月第 年月第 年月第 年月第 年月 如HTML,CSS,JavaScript和DOM中。并能夠嵌入WebKit在其他好嵌入的API。HTML格式的內(nèi)容繪制出來,包括,aHTML的布局,譬如左邊是什么,體還是楷書,大小尺寸,重體斜體等等。c.顯示不同格式的,譬如JPG,GIF,PNG等等。所以,WebKit是一個(gè)渲染機(jī)(RenderingEngine)。說來,JavaScriptEngine不屬于WebKit,但是WebKit自帶了一個(gè)JavaScriptEngine,SquirrelFish。不過在WebKit框架下,可以把SquirrelFishJavaEngine替換成其它版本,而不影響WebKit整體工作。 其界面渲染,使用了微軟的RenderingEngine,Trident。甚至微軟的第一層為業(yè)務(wù)應(yīng)用層,用戶可在webkit基礎(chǔ)上構(gòu)建 第四層為平臺(tái)和操作系統(tǒng)支持層,提供webkit平臺(tái) 是只有一個(gè)mainFrame,其它Frame是頁面內(nèi)的 和mainFrame在page.cpp文件里,還有個(gè)重要;allPages在PagePagewindow,才會(huì)新數(shù)據(jù)的加載(FrameLoader)、頁面內(nèi)的各種有個(gè)子類是HTML Text,CommentCDATASectionElement…… XHTMLSVGWML都有響應(yīng)的能力,由于DOM的位置,因此在窗口發(fā)生時(shí),它第一個(gè)接收到,并尋找到發(fā)生的目標(biāo)元素,然后從目標(biāo)元素開始以樹的路徑向上依次處理。用RenderObjectRender結(jié)點(diǎn)并最終RenderRender樹各種結(jié)點(diǎn)類的基類,它的一個(gè)孫子類——RenderView,就Render樹的根結(jié)點(diǎn)。 Dom樹Rendering 到根直到得到結(jié)果?,F(xiàn)在已經(jīng)擁有了目標(biāo)ip和端 :GET HTTP1.0200OK 正在運(yùn)行的HTTP版本號(hào)和應(yīng)答代碼。代碼"200OK"表示請(qǐng)求完成。

理,在這里報(bào)文打上了傳輸頭的包頭,主要包含端,以及tcp的各種制信數(shù)據(jù)傳送單位segmenttcp是一種端到端的協(xié)議,利用這些信息,比如tcp首址。首先在本機(jī),要查找本機(jī)的路由表,在windows上運(yùn)行routeprint就可以ActiveRoutesDefaultRoutePersistent路由器收到數(shù)據(jù)后,它再次為主機(jī)或網(wǎng)絡(luò)查詢路由,若還未找 。 gateway 01剛好對(duì)應(yīng)則返回自己的mac地址,同時(shí)將請(qǐng)求者的ipmac保存。這樣 路由表,真正的數(shù)據(jù)傳協(xié)議:SDLC(SynchronousDataLinkControl)HDLC(High-levelDataLinkControl) TCP和UDP 和UDP的 TCP/UDP提供的傳輸服務(wù),并且這 基于tcp:netFTPSMTPDNS基于udp:RIPNTP(網(wǎng)落時(shí)間協(xié)議)和DNS(DNS也使用TCP)SNMP1.方便開發(fā),吸引 史(History)WebKit能夠用戶對(duì)于每個(gè)頁面做WebCore以及JavaScriptCore來打交道,也不需要和它們打交道,而是同我 了WebCore和JavaSriptCore部分。Webkit模塊實(shí)際上抽象出了大多數(shù)應(yīng)用程序所需要的那一部分,這里所說的大多數(shù)應(yīng)用程序其實(shí)就是指的瀏覽器,對(duì)于實(shí)現(xiàn)一個(gè)瀏覽器而言,覽器應(yīng)用程序的話,你只需要了解Webkit模塊部分就足夠了,更確切的說 分都是關(guān)于方法就像是其他可視組件一樣,在應(yīng)用程序中應(yīng)用起來非常方便。比如,某平臺(tái)提供了叫做WebView的可視化組件,我們就可以通過如下幾行代碼來展示一個(gè)網(wǎng)頁,使用的代碼僅僅三行:WebView*view=new Tree大致相同,基本上DOMTree里面每一個(gè)節(jié)點(diǎn),在DOMTree與RenderingTree 3月,在歐洲原子能研究組織(CERN)工作的TimBerners-Lee,提議在 hyperlink。在撰寫網(wǎng)頁時(shí),可以對(duì)于某些詞句,設(shè)置隱含的hyperlinks。當(dāng)讀規(guī)范就是“超文本標(biāo)識(shí)語言”,簡(jiǎn)稱HTML。最初的HTML制訂了22個(gè)標(biāo)識(shí),標(biāo)注兩方面的功能,1.內(nèi)容,包括 ,2.顯示格式。在同一份HTML文件里,把內(nèi)容和格式混雜在一起,這是一個(gè)設(shè)計(jì)錯(cuò)誤。20年過去了,現(xiàn)在的HTML文件內(nèi)容與格式分離,并不等同于DOMTree與RenderingTree并存。假如內(nèi)容由HTML承載, 視角,有旁觀者視角,還有俯瞰視角等等。換句話說,Webkit不僅滿足了 普通需要,而且提供了一些尚沒有被廣泛利用的潛在的功能。把DOMTree與Rendering代碼,給RenderingTree結(jié)構(gòu)的異化,也埋下了伏筆。RenderingTree的結(jié)構(gòu),不一定與一次打開某個(gè)頁面的時(shí)候,看到的是標(biāo)準(zhǔn)的頁面,也就是RenderingTree與DOMTree保 的段落,改變 們可以看到個(gè)性化的RenderingTree,與DOMTree保持一致的標(biāo)準(zhǔn)的RenderingTree,兩DOMclass與之對(duì)應(yīng)。譬如<HTML>tag對(duì)應(yīng)HTMLHtmlElement,<HEAD>tag較特別的是DOMTree的根節(jié)點(diǎn),HTML 一言以蔽之,DOMTree就是把HTML文本文件翻譯成object樹狀結(jié)構(gòu)。需要強(qiáng)調(diào)的是,DOMTree是一個(gè)通用數(shù)據(jù)結(jié)構(gòu),任何XML文本文件都可以翻譯成DOMTree,而不僅僅限于HTML文本文件。webkit/webcore/html中 總總htmlclasses,基本上都是webkit/webcore/dom中的某個(gè)class的子類,也就是說,/html是/dom際上是一個(gè)HTMLDOMTree。 整個(gè)RenderingTree樹狀結(jié)構(gòu),與HTMLDOMTree樹狀結(jié)構(gòu)一一對(duì)應(yīng)。也就是Tree中,沒有相應(yīng)的葉子節(jié)點(diǎn)。原因是,RenderingTree各個(gè)節(jié)點(diǎn),都涉及頁經(jīng)融入RenderingTree中RenderImage葉子節(jié)點(diǎn)的屬性中去了。另外,因?yàn)镽enderingTree中不存在與HTMLStyleElement相應(yīng)的葉子節(jié)點(diǎn),所以,與webkit/webcore/rendering中各個(gè)class與HTMLtags并沒有一一對(duì)應(yīng)的關(guān)系。RenderingTree是一個(gè)通用的規(guī)劃頁面布局和渲染的機(jī)制,這個(gè)通用機(jī)制可以RenderingTree來規(guī)劃其它格式的頁面的布局和渲染。以DOMTree和Rendering webkitcss部分的實(shí)現(xiàn)代碼為于 的用戶中,大多數(shù)人都不會(huì)在對(duì)<div> 呢,這自然需要通過詞法語法分析。在這里,Webkit使用了自動(dòng)代碼生成工自動(dòng)生成的代碼來CallBack,用過其他各類解析器的朋友們應(yīng)該很熟悉這個(gè)。 成代碼中需要的CallBack也需要在這里實(shí)現(xiàn)。StyleRule將被轉(zhuǎn)化為Webkit的內(nèi)部模型對(duì)象CSSStyleRule對(duì)象, 析所要的結(jié)果是什么?通過調(diào)用CSSStyleSheetparseString函數(shù),上CSS解析過程將啟動(dòng),解析完一遍后,所有的Rule都將在對(duì)應(yīng)的CSSStyleSheet對(duì)象轉(zhuǎn)換為CSSRuleSet中的rule,這樣所有的純樣式規(guī)則都會(huì)放在對(duì)應(yīng)的集合DOMTree與RenderingTree 是一個(gè)比較特殊的class,它是整個(gè)HTMLDOMTree的根節(jié)點(diǎn),但是不對(duì)應(yīng)任何HTMLtag。JavaScript中經(jīng)常出現(xiàn)的, ,與RenderingTree的根節(jié)點(diǎn)RenderView。而這DOMTree與RenderingTreeDOMTree的根節(jié)點(diǎn)HTML ,與RenderingTree的根節(jié)點(diǎn)RenderView, RenderingTree的 什么的內(nèi)容無關(guān)。同時(shí)HTML 同一個(gè)DOMTree的根節(jié)點(diǎn)可以懸掛多個(gè)HTML 。在我們目前所見到的瀏覽器中,每一個(gè)每個(gè)frame承載一個(gè)獨(dú)立的HTML文件,但是從DOMTree結(jié)構(gòu)來講, HTMLHtmlElement,它領(lǐng)銜某個(gè)HTML文本文件對(duì)應(yīng)的 DOMTree與RenderingTree 同時(shí)負(fù)責(zé)RenderingTree的構(gòu)筑。從第8步到第11步,HTMLParser根據(jù)一個(gè)HTMLTag生成一個(gè)HTMLDOMTree節(jié)點(diǎn)。從第12步到第17步,生成相應(yīng)的RenderingTree的節(jié)點(diǎn),并把它和HTMLDOMTree的節(jié)點(diǎn)勾連在一起。值得注意的是,每當(dāng)HTMLParser生成一個(gè)DOMTree的節(jié)點(diǎn)的時(shí)候,相連在一起。換而言之,RenderingTree與DOMTree同步生長(zhǎng)。Webkit值得贊賞的地方非常多,但是HTMLParser讓DOMTree和RenderingTree同步生長(zhǎng)的做法,卻值得商榷。如果同步生長(zhǎng),那么RenderingTree必然平鋪直敘地刻板地忠實(shí)于DOMTree。假設(shè)先生成Layout負(fù)責(zé)確定RenderTree中,每個(gè)葉子和中間節(jié)點(diǎn)的位置。每個(gè)節(jié)在Layout過程,WebkitPaint過程,負(fù)責(zé)把RenderTree中交給第圖形工具庫(GraphicsLibrary)去完成。常用的第圖形工 Layout涵蓋了所有CSS規(guī)定的布局要素。包括頁面邊緣與內(nèi)容之間的 器插件,Applet等等,在Layout被稱作Re RenderObject。這些Re ced元素的寬度和高度可以由CSS規(guī)定。如 RenderTree中每個(gè)節(jié)點(diǎn)在屏幕上的顯示,都呈長(zhǎng)方形格局。前面描述了寬度對(duì)于Re ced元素來說,它的高度相對(duì)比較容易確定,而文字段落的高度,LayoutRepaint為開頭的子過程,例如RenderTree所有可以顯示的葉子節(jié)點(diǎn)。所謂“可以顯示的 {alert(v) <imgonclick="myfunction('World')"height="250"width="290" onclick事件的,是Webkit還是JavaScriptEngine??jī)蓚€(gè)彈出的窗口,是Webkit還是JavaScriptEngine?注意到有兩個(gè)onclick="myfunction(...)",當(dāng)用戶在第一張里點(diǎn)擊鼠除了PC上的瀏覽器以外,是否也可以完成同樣的及其響應(yīng)?假如上沒有鼠標(biāo),但是有觸摸屏,如何把onclick定義成用手指點(diǎn) 從Webkit角度看,它不必關(guān)心interrupt以及interrupthandling的具體實(shí)現(xiàn),因?yàn)閃ebkit建筑在GUIToolkit之上,而GUIToolkit已經(jīng)把底層的 FundationClasses)。一個(gè)是IBMEclipse的SWT。有了GUIToolkit,應(yīng)用程序處理鼠標(biāo)和鍵盤等等UI 化了許多,只需要做兩件事情。1.把 來源(eventsource),與處理邏輯(eventlistener)綁定。2.解析并執(zhí)行 <imgonclick="myfunction('World')"height="250" 一個(gè)HTMLImageElement節(jié)點(diǎn),相應(yīng)地,在RenderTree里有一個(gè)RenderImage節(jié)點(diǎn)。在layout()過程結(jié)束后,根據(jù)<img>語句中規(guī)定的RenderImage節(jié)點(diǎn),與DOMTree的HTMLElement節(jié)點(diǎn)一一對(duì)應(yīng),所以 ,經(jīng)過layout()過程以后,新 方式,1.直接調(diào)用HTMLDOMmethod,2.間接調(diào)用外設(shè)的Script。 改成,<imgonclick=" 在AdobeFlash的ActionEngine中。 同樣是Webkit渲染機(jī),可以調(diào)用不同的JavaScriptEngine。之所以能做到這一點(diǎn),是因?yàn)閃ebkit的架構(gòu)設(shè)計(jì),在設(shè)置JavaScriptEngine的時(shí)候,利用 Thelistenerbindingof HTMLElement節(jié)點(diǎn),以及RenderTree中RenderImage節(jié)點(diǎn)。如前文所述。在生成HTMLElement節(jié)點(diǎn)的過程中,因?yàn)樽⒁獾接衞nclick屬性,Webkit把所有EventListener的創(chuàng)建工作,交給 似于DesignPatterns中,Singleton的用法。也就是說,DOMTree的根 一個(gè)HTMLElement節(jié)點(diǎn),如果有多個(gè)類似于onclick的屬性,那么就需要多個(gè)相應(yīng)的EventListenerobjectinstances與之綁定。每個(gè)節(jié)點(diǎn)的每個(gè)屬性,都對(duì)應(yīng)一個(gè)獨(dú)立的EventListenerobjectinstance。同的屬性,對(duì)應(yīng)的也是不同的EventListenerobjectinstances。這是 objectinstances,這種做法給不同節(jié)點(diǎn)之間的信息傳遞,造成了很大 反過來設(shè)想一下,如果能夠有一種機(jī)制,讓同一個(gè)objectinstance,穿梭于多個(gè)HTMLElementNodes之間,那么瀏覽器的表現(xiàn)能力將會(huì)大大增強(qiáng),DOMTree的根節(jié)點(diǎn), 件屬性的值,分成HTMLDOMmethods和JavaScript兩類。但是不管某個(gè) 器,生成一個(gè)EventListener。kjs 如果想把JavaScriptCore替換成其它JavaScriptEngine,例如 不能簡(jiǎn)單地更改configurationfile,而需要修改一部分源代碼。所幸的 .{h,cpp}以及其它少數(shù)源代碼中,涉及kjs JSLazyEventListener命名的寓意,JS容易理解,意思是把 交給JavaScriptengine負(fù)責(zé)。所謂lazy指的是,除非用戶在 點(diǎn)擊了鼠標(biāo),否則,JavaScriptEngine不主動(dòng)處理 與lazy做法相對(duì)應(yīng)的是JIT即時(shí)編譯,譬 一些JavaScriptEngine,在 可能會(huì)有一些JavaScriptfunctions,雖然編譯過了,但是從來沒有被真 EventTargetNode:當(dāng)用戶觸發(fā)某個(gè),例如點(diǎn)擊鼠標(biāo),根據(jù)鼠標(biāo)所在位置,從RenderTree的根節(jié)點(diǎn)開始,一路搜索到鼠標(biāo)所在位置對(duì)應(yīng)的葉子節(jié)點(diǎn)。RenderTree根節(jié)點(diǎn)對(duì)應(yīng)的是整個(gè)瀏覽器頁面,而對(duì)應(yīng)一個(gè)DOMTreeNode。這一串DOMTreeNodes中,有些節(jié)點(diǎn)響應(yīng) ,另一些不響應(yīng)。例如在本文的例子中,<body>tag對(duì)應(yīng)的DOMTreeNode,和第一張 的<img>tag對(duì)應(yīng)的DOMTree 個(gè)DOMTreeNode,而且是對(duì) 多個(gè)DOMTreeNodes對(duì) JavaScriptEngine依次處理這一串節(jié)點(diǎn)中,每一個(gè)節(jié)點(diǎn)定義的 o')">,這意味著,有兩個(gè)DOMTreeNodes對(duì) 處理邏輯分別是myfunction('World')和 當(dāng)JavaScriptEngine獲得 則,解析為一棵樹狀結(jié)構(gòu),稱作ParseTree。有了這棵 本文的例子中,“myfunction('World')"這個(gè)字符串本身并沒有定義 值。當(dāng)JavaScriptEngine得到這個(gè)字符串以后,解析,執(zhí)行。執(zhí)行的結(jié)果JavaScriptEngine把這一句解析成ParseTree,然后執(zhí)行。 由bubblingpath決定,如前面圖形所示。在HTML文件中,可以規(guī)定event.bubbles屬性。如果沒有規(guī)定,那就按照bubbling的順序進(jìn)行,所以本文的例子,是先執(zhí)行<img>,彈出“World”的窗口,關(guān)掉 o”的窗口。 HTMLXML文檔與。通過插件(或?yàn)g覽器擴(kuò)展程序)PDFPDF文檔。公司“”的呈現(xiàn)引擎。而HTML文檔,并將各標(biāo)記逐個(gè)轉(zhuǎn)化成“內(nèi)容樹”據(jù)。HTML中這些帶有視覺指令的樣式信息將用于創(chuàng)建另一個(gè)樹結(jié)構(gòu)配一個(gè)應(yīng)出現(xiàn)在屏幕上的確切坐標(biāo)。下一個(gè)階段是繪制呈現(xiàn)引擎會(huì) 語法分析是應(yīng)用語言的語也稱為標(biāo)記),負(fù)責(zé)將輸入內(nèi)容分解成一個(gè)個(gè)有效標(biāo)記;而解析器負(fù)責(zé)根據(jù)語言的語則分析文檔的結(jié)構(gòu),從而構(gòu)建解析樹。詞求一個(gè)新標(biāo)記,并嘗試將其與某條語則進(jìn)行匹配。如如果沒有規(guī)則可以匹配,解析器就會(huì)將標(biāo)記到內(nèi)部,并繼續(xù)請(qǐng)求標(biāo)記,直至找到可與所有內(nèi)部的標(biāo)記匹配的規(guī)則。如果找不到任何匹配規(guī)則,解析器就會(huì)一個(gè)我們分析一下231:匹配語則的第一個(gè)子串是25條語則,這是一個(gè)項(xiàng)。匹配語則的第二個(gè)子串是23,而根據(jù)PLUS:+MINUS:expression:=termoperationtermoperation:=PLUS|MINUSterm:=INTEGER|地來說,自上而下的解析器從語法的結(jié)構(gòu)出發(fā),嘗試從中找到匹化為語則,直至滿足規(guī)則。自上而下的解析器會(huì)從的規(guī)則開始:首先將2+3標(biāo)識(shí)為一個(gè)表達(dá)式,然后將231標(biāo)識(shí)為一個(gè)表達(dá)式(標(biāo)識(shí)表達(dá)式的過程涉及到匹配其他規(guī)則,但是起點(diǎn)是別的規(guī)則)。器。您只要向其提供您所用語言的語法(詞匯和語則情,所以解析器是非常實(shí)用的。 到Lex和Yacc這樣的別名)。Flex的輸入是包含標(biāo)記的正則表達(dá)式定義的文件。Bison的輸入是采用BNF格式的語 DOM 含個(gè) :在HTML中, work/multipage/parsing.html。此算法由兩 HTML標(biāo)記。該算法使用狀 oworld oworld中的H字符時(shí),將創(chuàng)建并發(fā)送字符標(biāo)記,直到接收 現(xiàn)在我們回到“標(biāo)記打開狀態(tài)”。接收下一個(gè)輸入字符/時(shí),會(huì)創(chuàng)建endtag。 o“initialmode”。接收HTML標(biāo)記后轉(zhuǎn)為“beforehtml”模式,并在這 現(xiàn)在我們進(jìn)入了“inhead”模式,然后轉(zhuǎn)入“afterhead”模式。系統(tǒng)對(duì)現(xiàn)在,接收由“oworld”字符串生成的一系列字符標(biāo)記。接收第一 接收 其與<br>做同樣的處理。if(t->isCloseTag(brTag)&&m_ reportError(MalformedBRError);t->beginTag=true;}table</td></tr</table<tabletr><td>innertable</td></tr></table> ); {unsignedi=for(HTMLStackElem*curr=m_blockStack;i<&&curr&&curr->tagName==tagName;curr=curr->next,{returni!=cMaxRedundantTagDepth;end()來執(zhí)行關(guān)閉操作:if(t->tagName==htmlTag||t->tagName==bodyTag) 請(qǐng)編寫格式正確的HTML代碼。CSS種解析器進(jìn)行解析。事實(shí)上,CSSCSS的詞法和語法。num[0-9]+|[0-9]*"."[0-9]+nmstart[_a-z]|{nonascii}|{escape}name{nmchar}+ident) CSSCSS{rulesetselector[','S*selector]*'{'S*declaration[';'S*declaration]*的一個(gè)或多個(gè)(數(shù)量可選)由分號(hào)分隔的。“”和“選擇器BNF格式定義。Webkit使用Flex和Bison解析器 ,通過CSS解析器。Firefox使用的是人工編寫的自上而下的解析器。這兩種解析器都會(huì)將CSS文件解析成StyleSheet對(duì)象,且每個(gè)對(duì)象都包含CSS規(guī)則。CSS規(guī)則對(duì)象則包含選擇器和 與CSS語法對(duì)應(yīng)的對(duì)象。 預(yù)解析:Webkit和Firefox都進(jìn)行了這項(xiàng)優(yōu)化。在執(zhí)行 應(yīng)用樣式表不會(huì)更改DOM樹,因此似乎沒有必要等待樣 在 Firefox在樣式表加載和解析的過程中,會(huì) 而對(duì)于Webkit而言,僅當(dāng) 。DOM樹構(gòu)建的同時(shí),瀏覽器還會(huì)構(gòu)建另一個(gè)樹結(jié)構(gòu):呈現(xiàn)樹。這 Webkit代碼描述了根據(jù)dis 在Webkit,,元素不會(huì)插入呈現(xiàn)樹中,例如“head”元素。如果元素的dis y屬性值為“none”,那么也不會(huì)顯示在呈現(xiàn)樹中(但是visibility屬性值為另一個(gè)關(guān)于多呈現(xiàn)器的例子是格式無效的HTML。根據(jù)CSS規(guī)范, 的block呈現(xiàn)器,以包裹inline元素。在Firefox中,系統(tǒng)會(huì)針對(duì)DOM更新 在Webkit中,解析樣式和創(chuàng)建呈現(xiàn)器的過程稱為“附加”。每個(gè)DOM樹需要調(diào)用新的節(jié)點(diǎn)“attach”方法。CSS樣式屬性。己喜歡的樣式表放在“FirefoxProfile”文件夾下)。如果不進(jìn)行優(yōu)化,為每一個(gè)元素查找匹配的規(guī)則會(huì)造能問題。要為每一個(gè)元divdivdiv{...3個(gè)div元素的子代的<div>。如果您要檢查Webkit節(jié)點(diǎn)會(huì) 元素中不能有任何inline不能使用任何同級(jí)選擇器。WebCore在遇到任何同級(jí)選擇器時(shí),只會(huì) 局開關(guān),并停用整個(gè)文檔的樣式共享(如果存在)。這包括+選擇器以及:first-child和:last-child等選擇器。為了簡(jiǎn)化樣式計(jì)算,F(xiàn)irefox還采用了另外兩種樹:規(guī)則樹和樣式上下文樹。Webkit也有樣式對(duì)象,但它們不是保存在類似樣式上下文樹這DOM節(jié)點(diǎn)指向此類對(duì)象的相關(guān)樣式。幕大小的百分比,則需要換算成單位。規(guī)則樹的點(diǎn)子真的很巧 是BE-I(按照此順序)A-B-E-I-L,因此就已經(jīng)有了此路徑,這就減少了現(xiàn)在所需的工作量。別(border或color)的樣式信息。結(jié)構(gòu)中的屬性都是繼承的或非。reset類型的結(jié)構(gòu),則會(huì)使用默認(rèn)如果最特殊的節(jié)點(diǎn)確實(shí)添加了值,那么我們需要另行一些計(jì)算,以便將這些值轉(zhuǎn)化成實(shí)際值。然后結(jié)果6條規(guī)則(F節(jié)點(diǎn))。F節(jié)點(diǎn)。margin規(guī)則的最上層節(jié)點(diǎn)(B節(jié)點(diǎn))上找到該結(jié)構(gòu)。我們已經(jīng)有了color結(jié)構(gòu)的定義,因此不能使用緩存的結(jié)構(gòu)。由于color有一個(gè)屬性,我們無需上溯規(guī)則樹以填充其他屬性。 第二個(gè)<span>元素處理起來更加簡(jiǎn)單。 在Webkit中沒有規(guī)則樹,因此會(huì)對(duì)匹配的 p<pstyle="color:blue"HTML可視化屬性(映射到相關(guān)的樣式規(guī)則<pbgcolor="blue"CSS規(guī)則添加到某個(gè)哈希表中。這這種處理可以大大簡(jiǎn)化規(guī)則匹配。我們無需查看每一條,只要從哈希表<pclass="error">anerroroccurred</p><divid="messageDiv">thisisap元素尋找匹配的規(guī)則。類表中有一個(gè)“error”鍵,在tablediv{margin:5px}這條規(guī)則仍然會(huì)從標(biāo)記表中提取出來,因?yàn)殒I是table祖先。 要。這稱為“層疊”順序。根據(jù)CSS2規(guī)范,層疊的順序?yàn)椋▋?yōu)先級(jí) 記為選擇器中元素名稱和偽元素的個(gè)數(shù)(= 對(duì)于以下規(guī)則,Webkit通過替換“>”運(yùn)算符來實(shí)現(xiàn)排序:Webkit使用一個(gè)標(biāo)記來表示是否所有的頂HTML采用基于流的布局模型,這意味著大多數(shù)情況下只要一次遍歷歷(3.5)。布局是一個(gè)遞歸的過程。它從根呈現(xiàn)器(HTML文檔的<html>layout方法。 有兩種標(biāo)記:“dirty”和“childrenaredirty”。。dirty增量布局是異步執(zhí)行的。Firefox將增量布局的“reflow命令”加入隊(duì)列,而調(diào)度程序會(huì)觸發(fā)這些命令的批量執(zhí)行。Webkit也有用于執(zhí)行增量布局的計(jì)時(shí)器:對(duì)呈現(xiàn)樹進(jìn)行遍歷,并對(duì)dirty呈現(xiàn) 。在某些情況下,只有一個(gè)進(jìn)行了修改,因此 Width()-paddingLeft()-Width 。。域設(shè)為無效,這導(dǎo)致OS將其視為一塊“dirty區(qū)域”,并 。OS會(huì)很巧妙地將多個(gè)區(qū)域合并成一個(gè)瀏覽器的呈現(xiàn)器不在主進(jìn)程上。Chrome瀏覽器會(huì)在某種程度上模擬OS的行為。展示層會(huì)偵聽這些 。:Firefox遍歷整個(gè)呈現(xiàn)樹,為繪制的矩形建立一個(gè),然后繪制所有,再繪制所有邊框等等)Webkit矩形 Firefox和Safari中,該線程就Chrome瀏覽器中,該線程是標(biāo)26Firefox36個(gè))。 while(!mExiting) CSS框模型描述的是針對(duì)文檔樹中的元素而生成,并根據(jù)可視化格式 none-noboxis DOM樹中的位置相似,并根據(jù)其框類型和尺寸進(jìn)行布局。absolute和fixed 。 o() } o=function(){ } oWorld。而非 oWorld的形式題(代碼見備注): vara

返回值//返回值

調(diào)用函數(shù),返回值}。

varf=function(){} 雖然變量和函數(shù)可以在文檔任意位置,但是良好的習(xí)慣應(yīng)該是在所有JavaScript代碼之前全局變量和函數(shù),并對(duì)變量進(jìn)行初始化賦值。在函數(shù)內(nèi)部也是先變量,然后再。 塊中的變量或函數(shù)就會(huì)提示語法錯(cuò)誤。例如,當(dāng)JavaScript解釋器 如果在一個(gè)頁面中存在多個(gè)windows.onload處理函數(shù),則只有最后一個(gè)才是有效的,為了解決這個(gè)問題,可以把所有或調(diào)用函數(shù)都放在同一個(gè)onload處理函 window.onload= 而且通過這種方式可以改變函數(shù)的執(zhí)行順序,方法是:簡(jiǎn)單地調(diào)整onload處理函除了頁面初始化外,我們還可以通過各種交互來改變JavaScript代碼的執(zhí)行順序,如鼠標(biāo)、鍵盤及時(shí)鐘觸發(fā)器等方法 ?問題一,找不到通過 varn= ?問題二,不同JavaScript引擎對(duì)輸出的外部導(dǎo)入 varn=1; 1.<scriptsrc=" "></script>同步模式,又稱阻塞模式,會(huì) (如圖像)js之所以要同步執(zhí)行,是因?yàn)閖s中可能有輸出 簡(jiǎn)單說:加載的網(wǎng)絡(luò)timeline是瀑布模型,而異步加載的timeline是并發(fā)模2.常見異步加載(ScriptDOMElement)(function()vars .createElement('script');s.type=s.async=s.src= varga ': + vars= {varpo (function()functionvars .createElement('script');s.type=s.async=s.src= varx x.parentNode.insertBefore(s,if(window.attachEvent)window.attachEvent('onload',async_load);window.addEventListener('load',async_load,這和前面的方式差不多,但關(guān)鍵是它不是立即開始異步加載jsonload 補(bǔ)充:DOMContentLoadedDOMContentLoaded:頁面( XHREvalScriptinScriptvarxhrObj=getXHRObject();xhrObj.onreadystatechange=function(){if(xhrObj.readyState!=4)return;variframe vardoc=iframe.contentWindow. 時(shí)候,獲取scripttexteval執(zhí)行。<scriptasync和defer1.defer 屬性。 2.async Firefox3.6、Opera10.5、IE9和 HTML4.01與HTML5沒有async屬性,script將立即獲?。? 另參 說明:script態(tài)創(chuàng)建script元素)的方式?么直接在script中加上async屬性是最簡(jiǎn)單的方式。。的js,而是在需要的時(shí)候或稍后再通過js的控制來異步加載。 andexecute)。 我們都知道通過網(wǎng)絡(luò) script需要明顯的時(shí)間,但容易忽略了第二階段, 這些script可以延遲執(zhí)行,先異步 1.模擬較長(zhǎng) :vart_start=Number(newwhile(t_start+5000>Number(newDate())) <script 在IE6-7中script是順序 的,而不是現(xiàn)在的“并行 2.script放在頁面底部<script 在IE6-7中script是順 3.異步加載varse= se.src= ')[0].appendChild(se); 4.異步 +按需執(zhí)行(2010)varse=newImage();se.onload=registerScript();se.src= js與解析執(zhí)行js分離出 但是,前面已經(jīng)了,正常情況下,這是辦不到的,只functionvarfunctionf2(){alert(n);// Javascript語言特有的"鏈?zhǔn)阶饔糜?結(jié)構(gòu)(chainscope),。 functionvarn=999;}return}result();// 以函數(shù)內(nèi)部的變量,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存內(nèi)存中,不會(huì)在調(diào)用結(jié)束后,被回收機(jī)制(garbagecollection 的公用方法(PublicMethod),把內(nèi)部變量當(dāng)作它的私有屬性(privatevalue),這時(shí)一定要 Node-Node是一個(gè)命令行工具,你可 一個(gè)源碼包令行中輸入:nodemy_app.js。JS代碼將由V8javascriptengine運(yùn)行,是它讓Chrome運(yùn)行- ,然后大家開始工作。一旦有完成了一項(xiàng)任務(wù),他就在國王房間外面排隊(duì)等著報(bào)告。國王在一個(gè)時(shí)間點(diǎn)只讓一個(gè)報(bào)告,有時(shí)候國王還會(huì)給這個(gè)的任務(wù)去解決。這樣我們不用擔(dān)心代碼同時(shí)相同的數(shù)據(jù),這就是JavaScript的單線程/循環(huán)機(jī)制的優(yōu)雅。據(jù)庫查詢花費(fèi)掉了。有了node,你可以執(zhí)行所有查詢,這樣就Node.js被設(shè)計(jì)用來開發(fā)大規(guī)模高并發(fā)的網(wǎng)絡(luò)應(yīng)用,這種網(wǎng)絡(luò)應(yīng)用的瓶頸之一是在I/O的處理效率上。由于硬件及網(wǎng)絡(luò)的限制,I/O的速度往 模型,Node.js使用單一的Eventloop線程處理客戶請(qǐng)求,將I/O操作分派至各異步處理模塊,既解決了單線程模式下I/O阻塞的問題,又避上完成,即采用上面的第法。一旦遇到大量任務(wù)或者遇到一個(gè)模式"(synchronousI/O)或"堵塞模式"(blockingI/O)。"EventLoop是一個(gè)程序結(jié)構(gòu),用于等待和發(fā)送消息和 programmingconstructthatwaitsforanddispatcheseventsormessagesinaprogram.)“為"主線程";另一個(gè)負(fù)責(zé)主線其他進(jìn)程(主要是各種I/O操作)的通信,被稱為"EventLoop線程"(可以譯為"消息線程")。 讓EventLoop線程去通知相應(yīng)的I/O程序, 以用很少的資源,應(yīng)付大流量的原因。 I/O請(qǐng)求,然后等I/O結(jié)果,結(jié)果返回后再對(duì)其進(jìn)行操作,但這種請(qǐng)求I/O。這種處理方式雖然簡(jiǎn)單,務(wù)器每創(chuàng)建一個(gè)線程,每個(gè)線程大概會(huì)占用2M的系統(tǒng)內(nèi)存,而且線 while(newDate().getTime()<now+1000)//do 操作,比如說,重置的尺寸,那也將阻塞所有其他的請(qǐng)求。 。 First-classfunction:例如function作為數(shù)據(jù)傳遞,包裹他們以在需I/O之后執(zhí)行。回調(diào)計(jì)數(shù)器:對(duì)于基于的回調(diào),你無法保證對(duì)于任何特殊令,I/O都會(huì)被執(zhí)行。所以,一旦你需要多次查詢來完成某個(gè)處理,通?;卣{(diào)中,通過對(duì)返回的數(shù)據(jù)庫查詢進(jìn)行計(jì)數(shù))。查詢會(huì)被并發(fā)執(zhí)行,varhttp=varurl=varqs=URL地址,querystring模塊負(fù)責(zé)處理 varproverbs=["Theturtlewinstherace.","Godhidesinthedetails.","Therearetwowaystowrite programs;onlythethirdoneworks.","Perfectpracticemakesperfect."];這里為了方便,使用全局變量proverbs已有據(jù)庫。//Web服務(wù)器console.log("serverisrunning...");用Node.js發(fā)Web應(yīng)用非常簡(jiǎn)單,甚至不用 驅(qū)動(dòng)模型的編程風(fēng)格,在Node.jsvarpathname=console.log("Reqeustfor"+pathname+"if(pathname==="/"||pathname==="/index"||pathname==="/proverb"){}elseif(pathname==="/add")if(request.method.toLowerCase()=='post'){varbody='';request.on('data',function(data){body+=data;});request.on('end',function(){varPOST=

});}else}else in”}getProverb(response){varbody='<html>’++'charset=UTF-8"/>’++'</blockquote>'+'</body>’+'</html>';response.writeHead(200,{}

functionaddProverb(response){varbody='<html>'+'<head>'+'charset=UTF-8"++'<bodystyle="font-size:4em;line-height:1.2;margin-top:+'<formaction="/add"+'<textareaname="text"rows="10"+'<inputtype="submit"/>'+'</form>'++response.writeHead(200,{"Content-Type":}

functionadd(proverb,response){varbody='<html>’++'charset=UTF-8"/>’++'<bodystyle="font-size:4em;line-height:1.2;margin-top:+'<blockquote>'+proverb+'</blockquote>'++"Content-Type":} }} varmodule1=new_count:m1:functionm2:function = y-InvokedFunction varmodule1=var_count=varm1= varm2=function(){//... return{m1:m1,m2:m2 varmodule1=(functionmod.m3=function()varmodule1=(functionvarmodule1=(function($,YAHOO) Cherry的著名文章《JavaScriptModulePattern:In-Depth》。 模塊現(xiàn)在還沒有規(guī)范,這一點(diǎn)就更重要了。2009年,程序員RyanDahl創(chuàng)造了node.js項(xiàng)目,將javascript語言用 math.js,就可以像下面這樣加載:varmath=require('math');varmath=require('math');math.add(2,3);//5:varmath= math.add(2, AMD是"AsynchronousModuleDefinition"的縮寫,意思就是"異步模塊math.add(2,3); 一大堆的全局變量。通過延遲和按需加 阻塞式的并發(fā)式快速加載JavaScript代碼,使Web頁面上其他不依賴 、CSS以及其他DOM節(jié)點(diǎn)得以先加載完 AMD格式提供了幾個(gè)關(guān)鍵的好處。首先,它提供了一種緊湊的依 ,模塊名僅依賴其文件名通過將依賴性映射為局部變量,AMD鼓勵(lì)高效能的編碼實(shí) 或者模塊。如果 會(huì)造成全局變量的查找和眾多屬性的查找,增加了額外的開發(fā)工作同時(shí)降低了程序的性能。通過將模塊依賴性映射 某個(gè)功NeedJS一個(gè)輕量級(jí)的AMD : return{}define(['base'],function(base){return{//todowithmodule}}//initusers:[],// define(function(require,exports,module){varbase=require('base');//todowithmodule}除了define外,AMD還保留一個(gè)關(guān)鍵字require。require 留的全局標(biāo)識(shí)符,可以實(shí)現(xiàn)為moduleloader。也可以不實(shí)現(xiàn)。RequireJScurlDojobdLoadJSLocalnetNodules如MooTools、jQuery、qwery、 甚至還有firebug<script<script <script js下面的main.js,這個(gè)文件會(huì)第一個(gè)被require.js加載。由于 ////somecode paths:"jquery":"jquery.min","backbone":"backbone.min"} paths:"jquery":"lib/jquery.min","backbone":"lib/backbone.min" baseUrl:paths:"jquery":"jquery.min","backbone":"backbone.min"}paths:} varadd=function(x,y){returnx+y;};return{add:add};加載方法如下://main.jsfunctionfoo(){}foo: require(['domready!'],function(doc){//calledoncetheDOMis paths:{}if(typeofdefine==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){returnjQuery;});} //ExposejQuerytotheglobalobject型)2、collections(集合)3、views(視圖) 銷毀和保存到服務(wù)端,當(dāng)models中值被改變時(shí)自動(dòng)觸發(fā)一個(gè)"change"、所有用于展示models數(shù)據(jù)的views都會(huì)偵聽到這個(gè),然后進(jìn)行重新渲染。Backbone.View中可以綁定domel和客戶端。頁面中的html就是通過views數(shù)據(jù),例如:varview=newEmployeeView({model:employee});models的創(chuàng)建,銷毀,校驗(yàn)等一系列改變都會(huì)觸發(fā)相應(yīng)的;邏輯。 備注中的代碼定義一個(gè)CollectionChapters,并通過add函數(shù)往該框的顯示信息為:“TheBeginningTheMiddleTheEnd”。 。我們可以通過備注中代碼所示方式定義為li varemployee=new 。model: <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0 <p><script te"type="text/tem </BODY></HTML>varApp=Models:Views:{},Controllers:{},Collections:{},new()//} url:function(){ } el:$("body"), te:$("#<spanstyle="font-family:monospace;white-space:pre; initialize:function(options){this.options=options;this.bind('change',this.render); returnthis}routes:{ o": o:function() oModel=newApp.Models. oView=newApp.Views. }}) 數(shù)據(jù)顯示分離的方法,這個(gè)方法的假設(shè)前提是如果業(yè)務(wù)邏輯被到一個(gè)的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)的還是一個(gè)雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶的方式。擊Web頁面中的超和發(fā)送HTML表單時(shí),控制器本身不輸出任何東西高重用性:多個(gè)視圖可以共個(gè)模型,一個(gè)模型可以有多個(gè)視圖,人員可以自由發(fā)揮,做視圖的人和開發(fā)模型的人可以各定自己的 的 的速度,2.0WebformMVP MVP具有很多的變體,其中最為常用的一種變體成為PassiveView(被PassiveView,顧名思義,View是View盡可能不數(shù)據(jù)狀態(tài),因?yàn)槠浔旧韮H僅實(shí)現(xiàn)單純的、獨(dú)立的UI操作;Presenter才是整系的協(xié)調(diào)者,它根據(jù)處理用于交互的邏輯MVP是從經(jīng)典的模式MVC演變而來,它們的基本思想有相通的地方:并不直接使用Model,它們之間的通信是通過Presenter(MVC中的 數(shù)據(jù)而不是通過Controller。 在MVP里,P完全把Mo和Vw進(jìn)行了分離,主要的程序邏輯在PPVw關(guān)過定義好的接口進(jìn)行交,從而使得在變更Vw時(shí)候可以保持P的不!Vw,模擬用戶的各種操P試—。甚至可以Mo和Vw都沒有完成時(shí)候,就可以通過編寫MockOc(即Mod和Vw但內(nèi)P。在MVP里,應(yīng)用程序的邏輯主要在P來實(shí)現(xiàn),其中的Vw是很薄的一層。因此就有人提出了Prt的設(shè)計(jì)模式,就是根據(jù)rory來首先PVw的息清楚就可以。在后面,根據(jù)需要再隨便更改Vw,而對(duì)P沒有任何的。I比較復(fù)雜,而且相關(guān)的顯示邏輯還跟Mo有關(guān)系,就可以Vw和Pr之間放置一個(gè)a個(gè)a來 Mol和Vw,避免兩者之間的關(guān)聯(lián)。而同,因?yàn)閍r實(shí)現(xiàn)了Vw的接口,從P保Vw和P之間接口的簡(jiǎn)I。MVPVw/的方法,用戶輸入和設(shè)置界面顯示的內(nèi)容,除

溫馨提示

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

評(píng)論

0/150

提交評(píng)論