属性类型
Opened this issue · 0 comments
属性类型
ECMAScript有两种属性类型:数据属性和访问器属性
读取属性值
Object.getOwnPropertyDescriptor(obj, propertyName)
obj 要查看的属性所在对象
propertyName 属性名称
查看多个属性使用 Object.getOwnPropertyDescriptors(obj)
可以查看该对象下所有属性的值
数据属性
数据属性是某个数据值的位置
有4个特性:
configurable: 能否使用delete删除或修改其特性(默认true)
enumerable: 能否通过for-in循环返回属性(默认true)
writable: 是否可以修改该属性的值(默认true)
value:数据的值
修改属性的特性,需要用到Object.defineProperty(obj, propertyName,property)
接受3个参数:
obj: 需要修改的值所在的对象
propertyName :要修改的值键名称
property:属性值以及特性
var book = {};
Object.defineProperty(book, "name", {
value: "西游记"
})
通过对象字面量创建的值3个特性默认为true,但如果通过Object.defineProperty()来添加属性值,如果不设置为true。默认为false
使用后对象字面量创建的值默认为true:
使用Object.defineProperty创建的值如果不设置默认为false
注意:如果已经用Object.defineProperty将configurable设置为false,就不能再设置为true
访问器属性
修改属性的特性,需要用到Object.defineProperty(obj,propertyName,property)
同时设置多个属性使用,需要用到Object.defineProperties(obj, {property})
特性:
configurable 能否使用delete删除或修改其特性(默认true)
enumerable 能否通过for-in循环返回属性(默认true)
get 读取属性时调用
set 写入属性时调用
var book = {};
Object.defineProperty(book, "name", {
get(){
return '哈哈哈'
}
})
book.name //哈哈哈
获取对象内属性名
Object.keys(obj) 获取对象实例上可枚举的属性名
Object.getOwnPropertyNames() 获取对象实例上的属性名(可枚举和不可枚举的都可以获取到)
for-in 获取对象实例和原型上可枚举的属性名