成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ECMAScript中有兩種屬性:數(shù)據(jù)屬性和訪問器屬性。

objc94 / 1581人閱讀

摘要:數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。數(shù)據(jù)屬性有個描述其行為的特性。表示能否通過刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。其中,描述符對象的屬性必須是和。

ECMA-262定義這些特性是為了實現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問它們。為了表示特性是內(nèi)部值,該規(guī)范把它們放在了兩對兒方括號中,例如 [[Enumerable]] 。

ECMAScript中有兩種屬性:數(shù)據(jù)屬性和訪問器屬性。

1. 數(shù)據(jù)屬性

數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。在這個位置可以讀取和寫入值。數(shù)據(jù)屬性有4個描述其行為的特性。

[[Configurable]] :表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。像前面例子中那樣直接在對象上定義的屬性,它們的這個特性默認(rèn)值為 true 。

[[Enumerable]] :表示能否通過 for-in 循環(huán)返回屬性。像前面例子中那樣直接在對象上定義的屬性,它們的這個特性默認(rèn)值為 true。

[[Writable]] :表示能否修改屬性的值。像前面例子中那樣直接在對象上定義的屬性,它們的這個特性默認(rèn)值為 true 。

[[Value]] :包含這個屬性的數(shù)據(jù)值。讀取屬性值的時候,從這個位置讀;寫入屬性值的時候,把新值保存在這個位置。這個特性的默認(rèn)值為 undefined 。

對于像前面例子中那樣直接在對象上定義的屬性,它們的[[Configurable]] 、 [[Enumerable]] 和 [[Writable]] 特性都被設(shè)置為 true ,而 [[Value]] 特性被設(shè)置為指定的值。

例如:

var person = {
    name: “Nicholas”
};

這里創(chuàng)建了一個名為 name 的屬性,為它指定的值是 “Nicholas” 。也就是說, [[Value]] 特性將被設(shè)置為 “Nicholas” ,而對這個值的任何修改都將反映在這個位置。

要修改屬性默認(rèn)的特性,必須使用ECMAScript 5的 Object.defineProperty() 方法。這個方法接收三個參數(shù):屬性所在的對象、屬性的名字和一個描述符對象。其中,描述符(descriptor)對象的屬性必須是: configurable 、 enumerable 、 writable 和value 。設(shè)置其中的一或多個值,可以修改對應(yīng)的特性值。

例如:

var person = {};
Object.defineProperty(person, “name”, {
    writable: false,
    value: “Nicholas”
});
alert(person.name); //“Nicholas”
person.name = “Greg”;
alert(person.name); //“Nicholas”

這個例子創(chuàng)建了一個名為 name 的屬性,它的值 “Nicholas” 是只讀的。這個屬性的值是不可修改的,如果嘗試為它指定新值,則在非嚴(yán)格模式下,賦值操作將被忽略;在嚴(yán)格模式下,賦值操作將會導(dǎo)致拋出錯誤。類似的規(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 ,表示不能從對象中刪除屬性。如果對這個屬性調(diào)用 delete ,則在非嚴(yán)格模式下什么也不會發(fā)生,而在嚴(yán)格模式下會導(dǎo)致錯誤。而且,一旦把屬性定義為不可配置的,就不能再把它變回可配置了。此時,再調(diào)用 Object.defineProperty() 方法修改除 writable 之外的特性,都會導(dǎo)致錯誤:

var person = {};
Object.defineProperty(person, “name”, {
    configurable: false,
    value: “Nicholas”
});
//拋出錯誤
Object.defineProperty(person, “name”, {
    configurable: true,
    value: “Nicholas”
});

也就是說,可以多次調(diào)用Object.defineProperty() 方法修改同一個屬性,但在把configurable 特性設(shè)置為 false 之后就會有限制了。

在調(diào)用 Object.defineProperty() 方法時,如果不指定, configurable 、 enumerable和 writable 特性的默認(rèn)值都是 false 。多數(shù)情況下,可能都沒有必要利用 Object.defineProperty() 方法提供的這些高級功能。不過,理解這些概念對理解JavaScript對象卻非常有用。

IE8是第一個實現(xiàn) Object.defineProperty() 方法的瀏覽器版本。然而,這個版本的實現(xiàn)存在諸多限制:只能在DOM對象上使用這個方法,而且只能創(chuàng)建訪問器屬性。由于實現(xiàn)不徹底,建議讀者不要在IE8中使用 Object.defineProperty() 方法。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/51314.html

相關(guān)文章

  • ECMAScript中有兩種屬性數(shù)據(jù)屬性訪問屬性。

    摘要:數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。數(shù)據(jù)屬性有個描述其行為的特性。表示能否通過刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。其中,描述符對象的屬性必須是和。 ECMA-262定義這些特性是為了實現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問它們。為了表示特性是內(nèi)部值,該規(guī)范把它們放在了兩對兒方括號中,例如 [[Enumerab...

    GitCafe 評論0 收藏0
  • ECMAScript中有兩種屬性數(shù)據(jù)屬性訪問屬性。

    摘要:數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。數(shù)據(jù)屬性有個描述其行為的特性。表示能否通過刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。其中,描述符對象的屬性必須是和。 ECMA-262定義這些特性是為了實現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問它們。為了表示特性是內(nèi)部值,該規(guī)范把它們放在了兩對兒方括號中,例如 [[Enumerab...

    cpupro 評論0 收藏0
  • JS學(xué)習(xí)筆記(第6章)(面向?qū)ο蟮某绦蛟O(shè)計之理解對象)

    摘要:其中,描述符對象的屬性必須是和。吧設(shè)置為,表示不能從對象中刪除屬性。這個方法接收兩個對象參數(shù)要添加和修改其屬性值的對象,第二個是與第一個對象中要添加和修改的屬性值一一對應(yīng)。 理解對象 1、創(chuàng)建自定義對象的兩種方法: (1)創(chuàng)建一個Object實例,然后再為它添加屬性和方法。 var person = new Object(); person.name = Nicholas; ...

    FingerLiu 評論0 收藏0
  • 對象屬性

    摘要:作用修改屬性默認(rèn)的特性參數(shù)屬性所在的對象屬性的名字和一個描述符對象。描述符對象的屬性必須是和。這個方法接收兩個參數(shù)屬性所在的對象和要讀取器描述符的屬性名稱。 屬性的類型 ECMA-262 第 5 版在定義只有內(nèi)部才用的特性(attribute)時,描述了屬性(property)的各種特征。定義這些屬性是為了實現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問它們。...

    ispring 評論0 收藏0
  • JS數(shù)據(jù)類型

    摘要:它并沒有為整數(shù)給出一種特定的類型。例如,使用一個分隔符,一個可以模仿一個列表一個的數(shù)組可能更適合一些。不幸的是,當(dāng)一個分隔符在用于列表中的元素時,打亂了這個列表。 JS常用數(shù)據(jù)類型 編程語言都具有內(nèi)建的數(shù)據(jù)結(jié)構(gòu),但各種編程語言的數(shù)據(jù)結(jié)構(gòu)常有不同之處。本文試圖列出 JavaScript 語言中內(nèi)建的數(shù)據(jù)結(jié)構(gòu)及其屬性,它們可以用來構(gòu)建其他的數(shù)據(jù)結(jié)構(gòu);同時盡可能的描述與其他語言的不同之處。 ...

    ingood 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<