freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

學(xué)js必看-javascript數(shù)據(jù)結(jié)構(gòu)深度剖析(編輯修改稿)

2025-08-31 15:59 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 語(yǔ)言的“自我”是不同的,這是一個(gè)放下了的“自我”,這就是JavaScript特有的世界觀。 對(duì)象素描 已經(jīng)說(shuō)了許多了許多話題了,但有一個(gè)很基本的問(wèn)題我們忘了討論,那就是:怎樣建立對(duì)象? 在前面的示例中,我們已經(jīng)涉及到了對(duì)象的建立了。我們使用了一種被稱為JavaScript Object Notation(縮寫JSON)的形式,翻譯為中文就是“JavaScript對(duì)象表示法”。 JSON為創(chuàng)建對(duì)象提供了非常簡(jiǎn)單的方法。例如, 創(chuàng)建一個(gè)沒有任何屬性的對(duì)象: var o = {}。 創(chuàng)建一個(gè)對(duì)象并設(shè)置屬性及初始值: var person = {name: “Angel”, age: 18, married: false}。 創(chuàng)建一個(gè)對(duì)象并設(shè)置屬性和方法: var speaker = {text: “Hello World”, say: function(){alert()}}。 創(chuàng)建一個(gè)更復(fù)雜的對(duì)象,嵌套其他對(duì)象和對(duì)象數(shù)組等: var pany = { name: “Microsoft”, product: “softwares”, chairman: {name: “Bill Gates”, age: 53, Married: true}, employees: [{name: “Angel”, age: 26, Married: false}, {name: “Hanson”, age: 32, Marred: true}], readme: function() {( + ” product ” + )。} }。 JSON的形式就是用大括“{}”號(hào)包括起來(lái)的項(xiàng)目列表,每一個(gè)項(xiàng)目間并用逗號(hào)“,”分隔,而項(xiàng)目就是用冒號(hào)“:”分隔的屬性名和屬性值。這是典型的字典表示形式,也再次表明了 JavaScript里的對(duì)象就是字典結(jié)構(gòu)。不管多么復(fù)雜的對(duì)象,都可以被一句JSON代碼來(lái)創(chuàng)建并賦值。 其實(shí),JSON就是JavaScript對(duì)象最好的序列化形式,它比XML更簡(jiǎn)潔也更省空間。對(duì)象可以作為一個(gè)JSON形式的字符串,在網(wǎng)絡(luò)間自由傳遞和交換信息。而當(dāng)需要將這個(gè)JSON字符串變成一個(gè)JavaScript對(duì)象時(shí),只需要使用eval函數(shù)這個(gè)強(qiáng)大的數(shù)碼轉(zhuǎn)換引擎,就立即能得到一個(gè) JavaScript內(nèi)存對(duì)象。正是由于JSON的這種簡(jiǎn)單樸素的天生麗質(zhì),才使得她在AJAX舞臺(tái)上成為璀璨奪目的明星。 JavaScript就是這樣,把面向?qū)ο竽切┛此茝?fù)雜的東西,用及其簡(jiǎn)潔的形式表達(dá)出來(lái)。卸下對(duì)象浮華的濃妝,還對(duì)象一個(gè)眉目清晰! 構(gòu)造對(duì)象 好了,接下我們來(lái)討論一下對(duì)象的另一種創(chuàng)建方法。 除JSON外,在JavaScript中我們可以使用new操作符結(jié)合一個(gè)函數(shù)的形式來(lái)創(chuàng)建對(duì)象。例如: function MyFunc() {}。 //定義一個(gè)空函數(shù) var anObj = new MyFunc()。 //使用new操作符,借助MyFun函數(shù),就創(chuàng)建了一個(gè)對(duì)象 JavaScript的這種創(chuàng)建對(duì)象的方式可真有意思,如何去理解這種寫法呢? 其實(shí),可以把上面的代碼改寫成這種等價(jià)形式: function MyFunc(){}。 var anObj = {}。 //創(chuàng)建一個(gè)對(duì)象 (anObj)。 //將anObj對(duì)象作為this指針調(diào)用MyFunc函數(shù) 我們就可以這樣理解,JavaScript先用new操作符創(chuàng)建了一個(gè)對(duì)象,緊接著就將這個(gè)對(duì)象作為this參數(shù)調(diào)用了后面的函數(shù)。其實(shí), JavaScript內(nèi)部就是這么做的,而且任何函數(shù)都可以被這樣調(diào)用!但從 “anObj = new MyFunc()” 這種形式,我們又看到一個(gè)熟悉的身影,C++和C不就是這樣創(chuàng)建對(duì)象的嗎?原來(lái),條條大路通靈山,殊途同歸??! 君看到此處也許會(huì)想,我們?yōu)槭裁床豢梢园堰@個(gè)MyFunc當(dāng)作構(gòu)造函數(shù)呢?恭喜你,答對(duì)了!JavaScript也是這么想的!請(qǐng)看下面的代碼: function Person(name) //帶參數(shù)的構(gòu)造函數(shù) { = name。 //將參數(shù)值賦給給this對(duì)象的屬性 = function() {alert(”Hello, I’m ” + )。}。 //給this對(duì)象定義一個(gè)SayHello方法。 }。 function Employee(name, salary) //子構(gòu)造函數(shù) { (this, name)。 //將this傳給父構(gòu)造函數(shù) = salary。 //設(shè)置一個(gè)this的salary屬性 = function() {alert( + ” $” + )。}。 //添加ShowMeTheMoney方法。 }。 var BillGates = new Person(”Bill Gates”)。 //用Person構(gòu)造函數(shù)創(chuàng)建BillGates對(duì)象 var SteveJobs = new Employee(”Steve Jobs”, 1234)。 //用Empolyee構(gòu)造函數(shù)創(chuàng)建SteveJobs對(duì)象 ()。 //顯示:I’m Bill Gates ()。 //顯示:I’m Steve Jobs ()。 //顯示:Steve Jobs $1234 alert( == Person)。 //顯示:true alert( == Employee)。 //顯示:true alert( == )。 //顯示:false 這段代碼表明,函數(shù)不但可以當(dāng)作構(gòu)造函數(shù),而且還可以帶參數(shù),還可以為對(duì)象添加成員和方法。其中的第9行,Employee構(gòu)造函數(shù)又將自己接收的 this作為參數(shù)調(diào)用Person構(gòu)造函數(shù),這就是相當(dāng)于調(diào)用基類的構(gòu)造函數(shù)。第222行還表明這樣一個(gè)意思:BillGates是由Person構(gòu)造的,而SteveJobs是由Employee構(gòu)造的。對(duì)象內(nèi)置的constructor屬性還指明了構(gòu)造對(duì)象所用的具體函數(shù)! 其實(shí),如果你愿意把函數(shù)當(dāng)作“類”的話,她就是“類”,因?yàn)樗緛?lái)就有“類”的那些特征。難道不是嗎?她生出的兒子各個(gè)都有相同的特征,而且構(gòu)造函數(shù)也與類同名嘛! 但要注意的是,用構(gòu)造函數(shù)操作this對(duì)象創(chuàng)建出來(lái)的每一個(gè)對(duì)象,不但具有各自的成員數(shù)據(jù),而且還具有各自的方法數(shù)據(jù)。換句話說(shuō),方法的代碼體(體現(xiàn)函數(shù)邏輯的數(shù)據(jù))在每一個(gè)對(duì)象中都存在一個(gè)副本。盡管每一個(gè)代碼副本的邏輯是相同的,但對(duì)象們確實(shí)是各自保存了一份代碼體。上例中的最后一句說(shuō)明了這一實(shí)事,這也解釋了JavaScript中的函數(shù)就是對(duì)象的概念。 同一類的對(duì)象各自有一份方法代碼顯然是一種浪費(fèi)。在傳統(tǒng)的對(duì)象語(yǔ)言中,方法函數(shù)并不象JavaScript那樣是個(gè)對(duì)象概念。即使也有象函數(shù)指針、方法指針或委托那樣的變化形式,但其實(shí)質(zhì)也是對(duì)同一份代碼的引用。一般的對(duì)象語(yǔ)言很難遇到這種情況。 不過(guò),JavaScript語(yǔ)言有大的靈活性。我們可以先定義一份唯一的方法函數(shù)體,并在構(gòu)造this對(duì)象時(shí)使用這唯一的函數(shù)對(duì)象作為其方法,就能共享方法邏輯。例如: function SayHello() //先定義一份SayHello函數(shù)代碼 { alert(”Hello, I’m ” + )。 }。 function Person(name) //帶參數(shù)的構(gòu)造函數(shù) { = name。 //將參數(shù)值賦給給this對(duì)象的屬性 = SayHello。 //給this對(duì)象SayHello方法賦值為前面那份SayHello代碼。 }。 var BillGates = new Person(”Bill Gates”)。 //創(chuàng)建BillGates對(duì)象 var SteveJobs = new Person(”Steve Jobs”)。 //創(chuàng)建SteveJobs對(duì)象 alert( == )。 //顯示:true 其中,最后一行的輸出結(jié)果表明兩個(gè)對(duì)象確實(shí)共享了一個(gè)函數(shù)對(duì)象。雖然,這段程序達(dá)到了共享了一份方法代碼的目的,但卻不怎么優(yōu)雅。因?yàn)?,定義 SayHello方法時(shí)反映不出其與Person類的關(guān)系?!皟?yōu)雅”這個(gè)詞用來(lái)形容代碼,也不知道是誰(shuí)先提出來(lái)的。不過(guò),這個(gè)詞反映了程序員已經(jīng)從追求代碼的正確、高效、可靠和易讀等基礎(chǔ)上,向著追求代碼的美觀感覺和藝術(shù)境界的層次發(fā)展,程序人生又多了些浪漫色彩。 顯然,JavaScript早想到了這一問(wèn)題,她的設(shè)計(jì)者們?yōu)榇颂峁┝艘粋€(gè)有趣的prototype概念。 初看原型 prototype源自法語(yǔ),軟件界的標(biāo)準(zhǔn)翻譯為“原型”,代表事物的初始形態(tài),也含有模型和樣板的意義。JavaScript中的prototype概念恰如其分地反映了這個(gè)詞的內(nèi)含,我們不能將其理解為C++的prototype那種預(yù)先聲明的概念。 JavaScript的所有function類型的對(duì)象都有一個(gè)prototype屬性。這個(gè)prototype屬性本身又是一個(gè)object類型的對(duì)象,因此我們也可以給這個(gè)prototype對(duì)象添加任意的屬性和方法。既然prototype是對(duì)象的“原型”,那么由該函數(shù)構(gòu)造出來(lái)的對(duì)象應(yīng)該都會(huì)具有這個(gè)“原型”的特性。事實(shí)上,在構(gòu)造函數(shù)的prototype上定義的所有屬性和方法,都是可以通過(guò)其構(gòu)造的對(duì)象直接訪問(wèn)和調(diào)用的。也可以這么說(shuō), prototype提供了一群同類對(duì)象共享屬性和方法的機(jī)制。 我們先來(lái)看看下面的代碼: function Person(name) { = name。 //設(shè)置對(duì)象屬性,每個(gè)對(duì)象各自一份屬性數(shù)據(jù) }。 = function() //給Person函數(shù)的prototype添加SayHello方法。 { alert(”Hello, I’m ” + )。 } var BillGates = new Person(”Bill Gates”)。 //創(chuàng)建BillGates對(duì)象 var SteveJobs = new Person(”Steve Jobs”)。 //創(chuàng)建SteveJobs對(duì)象 ()。 //通過(guò)BillGates對(duì)象直接調(diào)用到SayHello方法 ()。 //通過(guò)SteveJobs對(duì)象直接調(diào)用到SayHello方法 alert( == )。 //因?yàn)閮蓚€(gè)對(duì)象是共享prototype的SayHello,所以顯示:true 程序運(yùn)行的結(jié)果表明,構(gòu)造函數(shù)的prototype上定義的方法確實(shí)可以通過(guò)對(duì)象直接調(diào)用到,而且代碼是共享的。顯然,把方法設(shè)置到prototype的寫法顯得優(yōu)雅多了,盡管調(diào)用形式?jīng)]有變,但邏輯上卻體現(xiàn)了方法與類的關(guān)系,相對(duì)前面的寫法,更容易理解和組織代碼。 那么,對(duì)于多層次類型的構(gòu)造函數(shù)情況又如何呢? 我們?cè)賮?lái)看下面的代碼: function Person(name) //基類構(gòu)造函數(shù) { = name。 }。 = function() //給基類構(gòu)造函數(shù)的prototype添加方法 { alert(”Hello, I’m ” + )。 }。 func
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1