2014-02-11 21 views
1

我看到這個代碼片段在Javascript:Javascript中的可枚舉和可配置屬性有什麼作用?

Object.defineProperty(Pet.prototype, "petName", { 
    get: function() { 
     return this.petName; 
    }, 
    set: function (petName) { 
     this.petName = petName; 
    }, 
    enumerable: true, 
    configurable: true 
}); 

這似乎是在Javascript屬性的存取方法。但我不明白的是enumerable: trueconfigurable: true。我搜索了網頁,但我仍然不太明白在Mozilla文檔中編寫的內容。我嘗試將它們設置爲false,並且似乎仍然可以訪問該屬性而沒有任何問題,並且它看起來沒有區別。

enumerableconfigurable屬性在這裏對存取方法做了什麼?如果有一個例子來說明他們的目的,會很好。

回答

3

MDN documentation for Object.defineProperty

枚舉

當且僅當此屬性中 枚舉相應對象的屬性的顯示出來。

即它在for ... in循環顯示,在Object.keys

配置

當且僅當此屬性描述 的類型可以改變,並且如果該屬性可能會從 對應的對象中刪除。

例如,如果configurable設置爲false,那麼你以後不能修改屬性的描述,也許它變回非enumerable,或writable

又見ES5 specification

+0

http://es5.github.io/#x8.6.1(此外,for ... in循環不是枚舉對象鍵的唯一方法) –

+0

@BenjaminGruenbaum thx鏈接... – Alnitak

+1

@PaulS。這不是您無法修改的屬性,而是屬性_descriptor_。 – Alnitak