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

2018-01-06 19:14 更新

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


訪問(wèn)器屬性有兩個(gè)附加屬性。

因?yàn)闆](méi)有為存取器屬性存儲(chǔ)值,所以不需要[[Value]]或[[Writable]]。

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

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

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

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

要使用對(duì)象字面符號(hào),我們必須在創(chuàng)建對(duì)象時(shí)定義訪問(wèn)器屬性。

我們可以指定訪問(wèn)器屬性是可配置還是可枚舉。



例子

下面的代碼


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; 
    } 
}; 

可以寫(xiě)成:


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]])允許您可以更改評(píng)估者屬性的工作原理。

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


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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)