0%

Object.defineProperty方法

<script>
        let num = 18;
        let person = {
            name: '张三',
            sex: '男'
        }

        //通过Object.defineProperty使得num和person.age绑定
        Object.defineProperty(person, 'age', {
            // value: 18,
            // enumerable: true,//控制属性是否可以被遍历,默认值为false
            // writable: true,//控制属性是否可以被修改,默认值为false
            // configurable: true,//控制属性是否可以被删除,默认值为false


            //当有人读取person中的age属性时,函数就会被调用,返回值就是age属性值
            get() {
                return num;
            },

            //当有人修改person中的age属性时,函数就会被调用,会收到修改的值
            //实际改了值,但由于get方法调用,num的值并没有被修改,所以要把value赋值给num
            set(value) {
                num = value
            }
        })

        console.log(Object.keys(person));
        console.log(person);
    </script>