Javascript面向?qū)ο蟮脑O(shè)計 - JavaScript訪問器屬性屬性

2018-01-06 19:14 更新

Javascript面向?qū)ο蟮脑O(shè)計 - JavaScript訪問器屬性屬性


訪問器屬性有兩個附加屬性。

因為沒有為存取器屬性存儲值,所以不需要[[Value]]或[[Writable]]。

相反,訪問器有[[Get]]和[[Set]],它們分別包含getter和setter函數(shù)。

我們只需要定義這些屬性之一來創(chuàng)建屬性。如果我們只定義[[Get]]屬性是可讀的,或者我們可以使用[[Set]]來設(shè)置屬性可寫。

如果您嘗試創(chuàng)建具有數(shù)據(jù)和訪問器屬性的屬性,您將獲得一個錯誤。

通過使用訪問器屬性屬性而不是對象我們可以定義的文字符號現(xiàn)有對象上的那些屬性。

要使用對象字面符號,我們必須在創(chuàng)建對象時定義訪問器屬性。

我們可以指定訪問器屬性是可配置還是可枚舉。



例子

下面的代碼


var book1 = { 
    _name : "Javascript", 
/*from   w  w w.j a va 2 s .c  om*/
    get name() { 
        console.log("Reading name"); 
        return this._name; 
    }, 

    set name(value) { 
        console.log("Setting name to %s", value); 
        this._name = value; 
    } 
}; 

可以寫成:


var book1 = { 
    _name : "Javascript" 
}; /*from   w w w  .j  a  va  2  s .  c  o  m*/

Object.defineProperty(book1, "name", { 
    get : function() { 
        console.log("Reading name"); 
        return this._name; 
    }, 
    set : function(value) { 
        console.log("Setting name to %s", value); 
        this._name = value; 
    }, 
    enumerable : true, 
    configurable : true 
}); 


例子...

設(shè)置其他屬性([[Ienumerable]]和[[Configurable]])允許您可以更改評估者屬性的工作原理。

我們可以創(chuàng)建一個不可配置,不可數(shù),不可寫的屬性,如下所示:


var book1 = { 
    _name : "Javascript" 
}; /*w w w .  ja v a 2s. co m*/
Object.defineProperty(book1, "name", { 
    get : function() { 
        console.log("Reading name"); 
        return this._name; 
    } 
}); 

console.log("name" in book1);                      // true 
console.log(book1.propertyIsEnumerable("name"));   // false 
delete book1.name; 
console.log("name" in book1);                      // true 

book1.name = "CSS"; 
console.log(book1.name);                           // "Javascript" 

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號