Object.defineProperty用法

发布时间 2023-10-21 12:11:41作者: 我也有梦想呀
1、能干啥?

Object.defineProperty()可以给传入的对象动态的添加或修改属性

2、怎么玩?

Object.defineProperty(obj,prop,desc)它有三个参数:

  • obj:需要定义属性的当前对象

  • prop:当前需要定义的属性名;注意是string类型

  • desc:属性描述符;注意是object类型

desc常用的属性:

  • value: 设置属性的值
  • writable: 值是否可以重写。true | false,默认false
  • enumerable: 目标属性是否可以被枚举。true | false,默认为false
  • configurable: 目标属性是否可以被删除或是否可以再次修改特性 true | false,默认为false
  • set(): 目标属性设置值的方法
  • get():目标属性获取值的方法

注意:当使用了getter或setter方法,不允许使用writable和value这两个属性

let number = 20;
            let person = {
                name: 'ly',
            };
            Object.defineProperty(
                person, // 操作的对象
                'age', // 属性名
                {
                    // value: 19, // 属性值
                    // enumerable: true, // 控制属性是否可以枚举(遍历),默认为fasle
                    // writable: true, // 控制属性是否可以被修改,默认为false
                    // configurable: true, // 控制属性是否可以删除,默认为false
                    get() {
                        console.log('获取值');
                        return 20;
                    },
                    set(value) {
                        console.log('设置值');
                        number = value;
                    },
                }
            );
            console.log(person);