mx52jing/blog

属性类型

Opened this issue · 0 comments

属性类型

ECMAScript有两种属性类型:数据属性和访问器属性

2138222763

读取属性值

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:

1073443719

使用Object.defineProperty创建的值如果不设置默认为false

1142438753

2130724080

注意:如果已经用Object.defineProperty将configurable设置为false,就不能再设置为true

1706814240

访问器属性

修改属性的特性,需要用到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 获取对象实例和原型可枚举的属性名