標籤:console 特性 als ons logs div efi conf value
var myObject = { a:2 }; Object.getOwnpropertyDescriptor(myObject,"a"); { value:2, writable:true, emumerable:true, configurable:true }
這段代碼中的屬性描述符不僅只有2,還有writable(可寫)、enumerable(可枚舉)、configurable(可配置)三種
在建立普通屬性時屬性描述符會使用預設值,我們也可以使用 Object.defineProperty(...)來添加一個新屬性或者修改一個已有屬性(如果是configurable)並對特性進行設定
程式碼範例:
var myObject = {}; Object.defineProperty(myObject,"a",{ value:2, writable:true, configurable:true, emumerable:true }); console.log(myObject.a);//2
下面是對這三個屬性描述符的介紹:
1)writable:決定是否可以修改屬性的值
var myObject = {}; Object.defineProperty(myObject,"a",{ value:2, writable:false, configurable:true, emumerable:true }); myObject.a = 3; console.log(myObject.a);//2
解析:writable:false 可以看作為屬性不可改變,在strict 模式("use strict";)下,引擎會拋出TypeError的異常,這表示我們無法修改一個不可寫的屬性
2)configurable:只要屬性是可配置的,就可以使用 defineProperty(...)方法來修改屬性描述符
注意!!
a)在false情況下,如果修改,不管是不是strict 模式,都會拋出TypeError的錯誤
b)在這種情況下,我們仍可以將可寫性的狀態由true改為false
c)delete屬性也會被禁止(delete myObject.a;)
3)emumerable:可枚舉,如果將它設定為false,則這個屬性將不會出現在枚舉中,但可以正常訪問他
JS屬性描述符