摘要:數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。數(shù)據(jù)屬性有個(gè)描述其行為的特性。表示能否通過(guò)刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問(wèn)器屬性。其中,描述符對(duì)象的屬性必須是和。
ECMA-262定義這些特性是為了實(shí)現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問(wèn)它們。為了表示特性是內(nèi)部值,該規(guī)范把它們放在了兩對(duì)兒方括號(hào)中,例如 [[Enumerable]] 。
1. 數(shù)據(jù)屬性ECMAScript中有兩種屬性:數(shù)據(jù)屬性和訪問(wèn)器屬性。
數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。在這個(gè)位置可以讀取和寫(xiě)入值。數(shù)據(jù)屬性有4個(gè)描述其行為的特性。
[[Configurable]] :表示能否通過(guò) delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問(wèn)器屬性。像前面例子中那樣直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true 。
[[Enumerable]] :表示能否通過(guò) for-in 循環(huán)返回屬性。像前面例子中那樣直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true。
[[Writable]] :表示能否修改屬性的值。像前面例子中那樣直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true 。
[[Value]] :包含這個(gè)屬性的數(shù)據(jù)值。讀取屬性值的時(shí)候,從這個(gè)位置讀;寫(xiě)入屬性值的時(shí)候,把新值保存在這個(gè)位置。這個(gè)特性的默認(rèn)值為 undefined 。
對(duì)于像前面例子中那樣直接在對(duì)象上定義的屬性,它們的[[Configurable]] 、 [[Enumerable]] 和 [[Writable]] 特性都被設(shè)置為 true ,而 [[Value]] 特性被設(shè)置為指定的值。
例如:
var person = { name: “Nicholas” };
這里創(chuàng)建了一個(gè)名為 name 的屬性,為它指定的值是 “Nicholas” 。也就是說(shuō), [[Value]] 特性將被設(shè)置為 “Nicholas” ,而對(duì)這個(gè)值的任何修改都將反映在這個(gè)位置。
要修改屬性默認(rèn)的特性,必須使用ECMAScript 5的 Object.defineProperty() 方法。這個(gè)方法接收三個(gè)參數(shù):屬性所在的對(duì)象、屬性的名字和一個(gè)描述符對(duì)象。其中,描述符(descriptor)對(duì)象的屬性必須是: configurable 、 enumerable 、 writable 和value 。設(shè)置其中的一或多個(gè)值,可以修改對(duì)應(yīng)的特性值。
例如:
var person = {}; Object.defineProperty(person, “name”, { writable: false, value: “Nicholas” }); alert(person.name); //“Nicholas” person.name = “Greg”; alert(person.name); //“Nicholas”
這個(gè)例子創(chuàng)建了一個(gè)名為 name 的屬性,它的值 “Nicholas” 是只讀的。這個(gè)屬性的值是不可修改的,如果嘗試為它指定新值,則在非嚴(yán)格模式下,賦值操作將被忽略;在嚴(yán)格模式下,賦值操作將會(huì)導(dǎo)致拋出錯(cuò)誤。類似的規(guī)則也適用于不可配置的屬性。
例如:
var person = {}; Object.defineProperty(person, “name”, { configurable: false, value: “Nicholas” }); alert(person.name); //“Nicholas” delete person.name; alert(person.name); //“Nicholas”
把 configurable 設(shè)置為 false ,表示不能從對(duì)象中刪除屬性。如果對(duì)這個(gè)屬性調(diào)用 delete ,則在非嚴(yán)格模式下什么也不會(huì)發(fā)生,而在嚴(yán)格模式下會(huì)導(dǎo)致錯(cuò)誤。而且,一旦把屬性定義為不可配置的,就不能再把它變回可配置了。此時(shí),再調(diào)用 Object.defineProperty() 方法修改除 writable 之外的特性,都會(huì)導(dǎo)致錯(cuò)誤:
var person = {}; Object.defineProperty(person, “name”, { configurable: false, value: “Nicholas” }); //拋出錯(cuò)誤 Object.defineProperty(person, “name”, { configurable: true, value: “Nicholas” });
也就是說(shuō),可以多次調(diào)用Object.defineProperty() 方法修改同一個(gè)屬性,但在把configurable 特性設(shè)置為 false 之后就會(huì)有限制了。
在調(diào)用 Object.defineProperty() 方法時(shí),如果不指定, configurable 、 enumerable和 writable 特性的默認(rèn)值都是 false 。多數(shù)情況下,可能都沒(méi)有必要利用 Object.defineProperty() 方法提供的這些高級(jí)功能。不過(guò),理解這些概念對(duì)理解JavaScript對(duì)象卻非常有用。
IE8是第一個(gè)實(shí)現(xiàn) Object.defineProperty() 方法的瀏覽器版本。然而,這個(gè)版本的實(shí)現(xiàn)存在諸多限制:只能在DOM對(duì)象上使用這個(gè)方法,而且只能創(chuàng)建訪問(wèn)器屬性。由于實(shí)現(xiàn)不徹底,建議讀者不要在IE8中使用 Object.defineProperty() 方法。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/51314.html
摘要:數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。數(shù)據(jù)屬性有個(gè)描述其行為的特性。表示能否通過(guò)刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問(wèn)器屬性。其中,描述符對(duì)象的屬性必須是和。 ECMA-262定義這些特性是為了實(shí)現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問(wèn)它們。為了表示特性是內(nèi)部值,該規(guī)范把它們放在了兩對(duì)兒方括號(hào)中,例如 [[Enumerab...
摘要:數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。數(shù)據(jù)屬性有個(gè)描述其行為的特性。表示能否通過(guò)刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問(wèn)器屬性。其中,描述符對(duì)象的屬性必須是和。 ECMA-262定義這些特性是為了實(shí)現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問(wèn)它們。為了表示特性是內(nèi)部值,該規(guī)范把它們放在了兩對(duì)兒方括號(hào)中,例如 [[Enumerab...
摘要:其中,描述符對(duì)象的屬性必須是和。吧設(shè)置為,表示不能從對(duì)象中刪除屬性。這個(gè)方法接收兩個(gè)對(duì)象參數(shù)要添加和修改其屬性值的對(duì)象,第二個(gè)是與第一個(gè)對(duì)象中要添加和修改的屬性值一一對(duì)應(yīng)。 理解對(duì)象 1、創(chuàng)建自定義對(duì)象的兩種方法: (1)創(chuàng)建一個(gè)Object實(shí)例,然后再為它添加屬性和方法。 var person = new Object(); person.name = Nicholas; ...
摘要:作用修改屬性默認(rèn)的特性參數(shù)屬性所在的對(duì)象屬性的名字和一個(gè)描述符對(duì)象。描述符對(duì)象的屬性必須是和。這個(gè)方法接收兩個(gè)參數(shù)屬性所在的對(duì)象和要讀取器描述符的屬性名稱。 屬性的類型 ECMA-262 第 5 版在定義只有內(nèi)部才用的特性(attribute)時(shí),描述了屬性(property)的各種特征。定義這些屬性是為了實(shí)現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問(wèn)它們。...
摘要:它并沒(méi)有為整數(shù)給出一種特定的類型。例如,使用一個(gè)分隔符,一個(gè)可以模仿一個(gè)列表一個(gè)的數(shù)組可能更適合一些。不幸的是,當(dāng)一個(gè)分隔符在用于列表中的元素時(shí),打亂了這個(gè)列表。 JS常用數(shù)據(jù)類型 編程語(yǔ)言都具有內(nèi)建的數(shù)據(jù)結(jié)構(gòu),但各種編程語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)常有不同之處。本文試圖列出 JavaScript 語(yǔ)言中內(nèi)建的數(shù)據(jù)結(jié)構(gòu)及其屬性,它們可以用來(lái)構(gòu)建其他的數(shù)據(jù)結(jié)構(gòu);同時(shí)盡可能的描述與其他語(yǔ)言的不同之處。 ...
閱讀 2573·2021-11-23 09:51
閱讀 2486·2021-09-30 09:48
閱讀 1081·2021-09-10 10:51
閱讀 2222·2021-08-12 13:22
閱讀 3574·2021-08-11 10:24
閱讀 2173·2019-08-30 15:55
閱讀 650·2019-08-30 14:05
閱讀 3215·2019-08-30 13:03