首頁  >  文章  >  web前端  >  淺析ECMAScript中物件的兩種屬性

淺析ECMAScript中物件的兩種屬性

不言
不言原創
2018-07-17 14:52:421024瀏覽

ECMAScript物件有兩種屬性,分別為資料屬性和存取器屬性,接下來我們就分別對著兩種屬性進行分析。

1、資料屬性
資料屬性包含一個資料值的位置。這個位置可以讀取和寫入值。資料屬性有4個描述其行為的特性。
[ [ Configurable ] ]    表示能否透過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或能否將屬性修改為存取屬性。預設為true
[ [ Enumerable] ]    表示能否透過for-in循環傳回屬性。預設為true
[ [ Writable ] ]        表示能否修改屬性的值。預設為true
[ [ Value ] ]        包含這個屬性的屬性值。讀取屬性的時候,從這個位置讀取,寫入屬性的時候,把新值存在這個位置。預設為undefined
eg:

var p = {};
Object.defineProperty(p, "name", {
    writable: false,
    value: 'nihao' 
})

2、存取器屬性
存取器屬性不包含資料值,他們包含一對兒getter和setter函數(不過,這兩個函數都不是必須的)在讀取存取器屬性的時候會呼叫getter函數,這個函數負責傳回有效的值。在寫入存取器屬性是,會呼叫setter函數並傳入新值,這個函數負責決定如何處理資料
[ [ Configurable ] ]    表示能否透過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或能否把屬性修改為存取屬性。預設為true
[ [ Enumerable] ]    表示能否透過for-in循環傳回屬性。預設為true
[ [ Get ] ]            讀取屬性時所呼叫的函數,預設為undefined
[ [ Set ] ]            在寫入屬性時所呼叫的函數,預設為undefine#d#eg:在寫入屬性中所調用的函數,預設為undefine#d#eg:: #

var p = {get: 0};
Object.defineProperty(p, "name", {
    get: function (){
        console.log('get');
        return this.get;
    },
    set: function (newVal) {
        console.log('set');
        this.get = newVal;
    }
})

3、讀取屬性的特性Object.getOwnPropertyDescriptor(屬性所在的物件, 屬性名稱);

傳回值是一個對象,存取屬性configurable 、enumerable、get、set四個屬性,
如果是數值屬性,傳回的物件屬性有configurable 、enumerable、writable、value四個屬性
備註:
Object.defineProperties()函數可以定義多個屬性
eg:

var p = {get: 0};
Object.defineProperties(p, {"name", {
    get: function (){
        console.log('get');
        return this.get;
    },
    set: function (newVal) {
        console.log('set');
        this.get = newVal;
    }
}, "age": {
       writable: true,
       value: 11
   }
})

相關推薦:


ECMAScript 5中的屬性描述符詳解_基礎知識

以上是淺析ECMAScript中物件的兩種屬性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn