国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ECMAScript中有兩種屬性:數據屬性和訪問器屬性。

GitCafe / 482人閱讀

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

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

ECMAScript中有兩種屬性:數據屬性和訪問器屬性。

1. 數據屬性

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

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

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

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

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

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

例如:

var person = {
    name: “Nicholas”
};

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

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

例如:

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

這個例子創建了一個名為 name 的屬性,它的值 “Nicholas” 是只讀的。這個屬性的值是不可修改的,如果嘗試為它指定新值,則在非嚴格模式下,賦值操作將被忽略;在嚴格模式下,賦值操作將會導致拋出錯誤。類似的規則也適用于不可配置的屬性。

例如:

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

把 configurable 設置為 false ,表示不能從對象中刪除屬性。如果對這個屬性調用 delete ,則在非嚴格模式下什么也不會發生,而在嚴格模式下會導致錯誤。而且,一旦把屬性定義為不可配置的,就不能再把它變回可配置了。此時,再調用 Object.defineProperty() 方法修改除 writable 之外的特性,都會導致錯誤:

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88726.html

相關文章

  • ECMAScript中有兩種屬性數據屬性訪問屬性

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

    objc94 評論0 收藏0
  • ECMAScript中有兩種屬性數據屬性訪問屬性

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

    cpupro 評論0 收藏0
  • JS學習筆記(第6章)(面向對象的程序設計之理解對象)

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

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

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

    ispring 評論0 收藏0
  • JS數據類型

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

    ingood 評論0 收藏0

發表評論

0條評論

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