《HTML教程》-5.3教學(xué)材料_第1頁(yè)
《HTML教程》-5.3教學(xué)材料_第2頁(yè)
《HTML教程》-5.3教學(xué)材料_第3頁(yè)
《HTML教程》-5.3教學(xué)材料_第4頁(yè)
《HTML教程》-5.3教學(xué)材料_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

關(guān)于訪(fǎng)問(wèn)屬性有以下規(guī)則:◆如果只設(shè)置了getter方法,則屬性只讀,不可寫(xiě);

◆如果只設(shè)置了setter方法,則屬性只寫(xiě),不可讀;

◆如果同時(shí)設(shè)置了getter和setter方法,則屬性是即可讀又可寫(xiě)的。數(shù)據(jù)屬性前面已經(jīng)介紹過(guò)了(5.1.1節(jié)),下面說(shuō)明訪(fǎng)問(wèn)屬性的聲明格式。下面借用文獻(xiàn)[18]的例子來(lái)說(shuō)明訪(fǎng)問(wèn)屬性的用法。//定義復(fù)數(shù)varp={ //x坐標(biāo)和y坐標(biāo)——數(shù)據(jù)屬性 x:1, y:1, //可讀可寫(xiě)的r屬性,求x+yi的模 getr(){returnMath.sqrt(this.x*this.x+this.y*this.y);}, setr(newValue){varoldValue=Math.sqrt(this.x*this.x+this.y*this.y); varratio=newValue/oldValue; this.x*=ratio; this.y*=ratio; }, //只讀的theta屬性,求復(fù)數(shù)x+yi的輻角 gettheta(){returnMath.atan2(this.y,this.x);}};對(duì)以上代碼的說(shuō)明:◆Math.sqrt(x)——對(duì)參數(shù)x求平方根;◆Math.atan2(y,x)——求坐標(biāo)點(diǎn)(x,y)與x軸的角度,也可以理解為求x+yi的輻角。以上代碼聲明了可讀可寫(xiě)的r屬性,因?yàn)樗从術(shù)etter方法也有setter方法。聲明了只讀的theta屬性,只為它只有g(shù)etter方法。getter方法的聲明格式如下:getr(){returnMath.sqrt(this.x*this.x+this.y*this.y);}先是get關(guān)鍵字,然后是屬性名r,再后面是一對(duì)圓括弧,后面是一對(duì)花括號(hào)?;ɡㄌ?hào)中是對(duì)屬性r讀取時(shí)所進(jìn)行的操作,也就是如何確定r的值。其結(jié)構(gòu)分解如下圖所示:setter方法的聲明與getter方法類(lèi)似,不再贅述。需要說(shuō)明的是,雖然訪(fǎng)問(wèn)屬性表面上看起來(lái)像是函數(shù),但實(shí)際上是屬性,只能通過(guò)訪(fǎng)問(wèn)屬性的方法進(jìn)行訪(fǎng)問(wèn),而不能作為函數(shù)進(jìn)行訪(fǎng)問(wèn)(有關(guān)函數(shù)的內(nèi)容后面詳細(xì)介紹)。還要注意的是,通過(guò)getter和setter方法我們獲得了控制屬性讀寫(xiě)特性的方法:◆只讀屬性——只提供getter方法;

◆只寫(xiě)屬性——只提供setter方法;

◆讀寫(xiě)屬性——同時(shí)提供getter和setter方法。訪(fǎng)問(wèn)特性實(shí)例見(jiàn)隨書(shū)源碼的Listing5-2.html中。5.3.2屬性的特性1、屬性特性在JavaScript中控制屬性的讀寫(xiě)屬性的還有以下幾個(gè)特性:

◆數(shù)據(jù)屬性——value、writable、enumerable和configurable。

◆訪(fǎng)問(wèn)屬性——get、set、enumerable和configurable。其中的屬性說(shuō)明如下[21]:◆value——表示屬性的默認(rèn)值,缺省值為undefined?!鬳numerable——表示屬性是否可枚舉(即可否用for…in語(yǔ)句或Object.keys()方法列出對(duì)象的這個(gè)屬性),false為不可枚舉,缺省值為true。Object.keys()方法用于獲得/返回指定對(duì)象的所有屬性名?!魒ritable——表示屬性的值value是否可修改,false為不可修改,缺省值為true,即屬性可修改?!鬰onfigurable——能否使用delete、能否修改屬性特性、或能否修改訪(fǎng)問(wèn)器屬性,false為不可重新定義,缺省值為true。2、設(shè)置/修改屬性特性

可以通過(guò)Object.defineProperty()設(shè)置/修改屬性的特性,defineProperty()函數(shù)的原型如下:Object.defineProperty(對(duì)象名,屬性名,屬性描述符)其參數(shù)說(shuō)明如下:

◆對(duì)象名——要進(jìn)行屬性設(shè)置的對(duì)象。

◆屬性名——要進(jìn)行設(shè)置的屬性。

◆屬性描述符——是一個(gè)對(duì)象,包含用于設(shè)置的屬性特性。格式如{value:1,writable:false,enumerable:false, configurable:true}。

◆返回值——設(shè)置/修改屬性后的對(duì)象。此外,還有Object.defineProperties()方法,可以一次設(shè)置或修改多個(gè)屬性,函數(shù)原型如下:Object.defineProperties(對(duì)象名,屬性特性描述對(duì)象)參數(shù)說(shuō)明如下:

◆對(duì)象名——要修改屬性的對(duì)象名稱(chēng);

◆屬性特性描述對(duì)象——屬性和屬性描述符的映射對(duì)象,即“屬性:屬性描述符”組成的鍵值對(duì)組成的對(duì)象。

◆返回值——設(shè)置/修改屬性后的對(duì)象。3、獲取屬性的特性

Object.getOwnPropertyDescriptor()方法用于獲得對(duì)象的指定屬性的特性,以屬性描述符表示。它只能獲得當(dāng)前對(duì)象的屬性特性,不能獲得繼承屬性的特性。原型如下:Object.getOwnPropertyDescriptor(對(duì)象名,屬性名)參數(shù)說(shuō)明:

◆對(duì)象名——要獲得屬性特性的對(duì)象。

◆屬性名——要獲得特性的屬性。

◆返回值——屬性描述符的對(duì)象表示。對(duì)象屬性控制的代碼如清單5-3所示。對(duì)清單5-3對(duì)象屬性的控制代碼的解析出的知識(shí)點(diǎn)如下:1)兩對(duì)概念:可讀性和可枚舉性,可寫(xiě)性與可配置性??勺x性是指按照對(duì)象屬性的訪(fǎng)問(wèn)方式能不能得到屬性的值,如o.x可得到x的屬性值1。而可枚舉性是指通過(guò)for…in循環(huán)或者Object.keys()能否得到對(duì)象的屬性。對(duì)于不可枚舉的屬性可以通過(guò)o.x的形式獲取值,但卻看不到對(duì)象o的x屬性,這似乎有點(diǎn)矛盾!既然看不到對(duì)象o的x屬性,為什么可以通過(guò)o.x獲得屬性值呢?或許我們可以簡(jiǎn)單的這么認(rèn)為,可讀性是給人看的,只要有屬性且沒(méi)有設(shè)置成私有屬性(這里我們不討論如何實(shí)現(xiàn)屬性的私有化,即如何實(shí)現(xiàn)面向?qū)ο蟮姆庋b性)就可以通過(guò)“對(duì)象名.屬性名”的方式讀取屬性的值,而與屬性的可枚舉性無(wú)關(guān)??擅杜e性是給“程序”看的,也就是說(shuō)不可枚舉的屬性,“程序”是看不到的。也就相當(dāng)于可讀性對(duì)于屬性的值給人開(kāi)了扇“窗”,而這扇“窗”對(duì)于“程序”是關(guān)閉的。可寫(xiě)性是指是否可以對(duì)屬性的值value進(jìn)行修改/賦值,而可配置性是指是否可以對(duì)屬性的特性進(jìn)行操作,其中也包括可寫(xiě)性。如果配置不可配置,也即configurable:false,則無(wú)法更改屬性特性——value/get、writable/set、enumerable和configurable。所以,對(duì)于清單5-4中對(duì)象o的屬性x,Object.defineProperty(o,'x',{ value:1,//默認(rèn)值 writable:false,//value不可修改(或不可寫(xiě)) enumerable:false,//不可枚舉 configurable:true//可配置});雖然它的writable:false,但它的configurable:true,我們?nèi)匀豢梢杂肙bject.defineProperty(o,'x',{value:3});的方式修改它的value特性,即屬性的值,因?yàn)閤屬性是可配置的,但不能通過(guò)o.x=3的方式對(duì)它賦值,因?yàn)樗遣豢蓪?xiě)的。(2)屬性描述符中訪(fǎng)問(wèn)屬性的聲明屬性描述符中聲明訪(fǎng)問(wèn)屬性的方式與字面量中不同,如下圖所示:因?yàn)樵趯傩悦枋龇新暶髟L(fǎng)問(wèn)屬性時(shí),已經(jīng)在Object.defineProperty()函數(shù)的第二個(gè)參數(shù)指定了屬性名字,所以在get后面不需要再指定屬性名了,而使用function關(guān)鍵字代替,還要注意的是get后面有一冒號(hào)(:),而對(duì)于字面量中聲明訪(fǎng)問(wèn)屬性,是沒(méi)有這一冒號(hào)的?。?)屬性描述符的懶格式與代碼說(shuō)明對(duì)于上面的代碼還有一處需要說(shuō)明的地方,那就是defineProperties()設(shè)置屬性的說(shuō)明。這里涉及兩點(diǎn):第一屬性描述符的懶格式,第二代碼嵌套聲明的說(shuō)明。如下圖所示:屬性描述符的懶格式是指書(shū)寫(xiě)屬性描述符時(shí)不用包含所有的屬性特性,只包含需要說(shuō)明的屬性特性即可,其他的采用缺省值。如圖中name屬性、author屬性和price屬性的描述符都采用了懶格式的寫(xiě)法。也就是說(shuō),屬性描述符中可以只出現(xiàn)特性值為非undefined和false的訪(fǎng)問(wèn)特性,其他的訪(fǎng)問(wèn)特性采用缺省值

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論