1. 数据属性(数据描述符)
Configurable
表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为trueEnumerable
表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为trueWritable
能否修改属性的值,如果直接使用字面量定义对象,默认值为trueValue
该属性对应的值,默认为undefined
2. 访问器属性(存取描述符)
Configurable
和数据属性的 Configurable
一样Enumerable
和数据属性的 Enumerable
一样Get
Set
3. Object.defineProperty()
直接在一个对象上定义或修改单个属性, 并返回这个对象。 若不指定configurable
、writable
、enumerable
,默认为 false 若不指定value
、get
、set
,默认为 undefined 参数:obj(目标对象)、prop(属性名)、descriptor(描述符)
Object .defineProperty(obj, prop, descriptor)
var obj = new Object ();
Object .defineProperty(obj, 'name' , {
configurable: false ,
writable: true ,
enumerable: true ,
value: 'hannah'
})
console.log(obj.name)
4. Object.defineProperties()
与 defineProperty
不同的是可操作多个属性
Object .defineProperties(obj, props)
var obj = new Object ();
Object .defineProperties(obj, {
name: {
configurable: false ,
writable: true ,
enumerable: true ,
value: 'hannah'
},
age: {
configurable: true ,
value: 18
}
})
console.log(obj.name, obj.age)
5. Object.getOwnPropertyDescriptor()
Object .getOwnPropertyDescriptor(obj)
var person = {
name: 'hannah' ,
age: 18
}
var name = Object .getOwnPropertyDescriptor(person, 'name' );
console.log(name)
输出:
6. Object. getOwnPropertyDescriptors
()
Object .getOwnPropertyDescriptors(obj)
var person = {
name: 'hannah' ,
age: 18
}
var name = Object .getOwnPropertyDescriptors(person);
console.log(name)
参考 js中的Object.defineProperty()和defineProperties()