js设置对象属性和读取对象属性详解

js中可以定义对象属性,也可以读取对象属性。下面进行详细讲解

属性分两种:数据属性和访问器属性。

1,数据属性

Configurable-表示属性是否可以通过 delete 删除并重新定义

Enumerable-表示属性是否可以通过 for-in 循环返回

Writable-表示属性的值是否可以被修改

Value-包含属性实际的值

2. 访问器属性

Configurable-表示属性是否可以通过 delete 删除并重新定义

Enumerable-表示属性是否可以通过 for-in 循环返回

Get-获取函数

Set-设置函数

3,读取对象属性

使用 Object.getOwnPropertyDescriptor()方法可以取得指定属性的属性描述符。这个方法接 收两个参数:属性所在的对象和要取得其描述符的属性名。返回值是一个对象,对于访问器属性包含 configurable、enumerable、get 和 set 属性,对于数据属性包含 configurable、enumerable、 writable 和 value 属性

Object.getOwnPropertyDescriptor():,获取指定对象的所有属性的属性描述明细

//1,数据属性
  let person = {};
  Object.defineProperty(person, "name", {
       writable: false, //不可写
       configurable: true, //不可删,非严格模式下无效
       value: '老王'
   })
   person.name = '小白' //无效
   console.log(person); //打印:老王

      let book = {
            year_: 2017,
            edition: 1
        };
        Object.defineProperty(book, "year", {
            get() {
                this.year_
            },
            set(newValue) {
                if (newValue > 2017) {
                    this.year_ = newValue
                    this.edition += newValue - 2017
                }
            }
        })
        book.year = 2018
        console.log(book.year); //undefined
        console.log(book.edition); //2
        //3,定义多个属性
        let table = {}
        Object.defineProperties(table, {
            year_: {
                value: 2017
            },
            edition: {
                value: 1
            },
            year: {
                get() {
                    return this.year_
                },
                set(newValue) {
                    if (newValue > 2017) {
                        this.year_ = newValue
                        this.edition += newValue - 2017
                    }
                }
            }
        })
        book.year = 2019
        console.log(table); //{year_: 2017, edition: 1}


    //3,Object.getOwnPropertyDescriptor(),获取指定属性的属性描述符

        let descriptor = Object.getOwnPropertyDescriptor(table, 'year_')
        console.log(descriptor); //{value: 2017, writable: false, enumerable: 
        false, configurable: false}
        //4,Object.getOwnPropertyDescriptors(),获取指定对象的所有属性的属性描述明细
        let descriptors = Object.getOwnPropertyDescriptors(table); 
        console.log(descriptors);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值