Object.defineProperty

穿精又带淫゛_ 提交于 2020-01-11 23:43:57

ES5规范开始后续版本的迭代,也在致力于做一件事,就是把js底层已有的功能,提供给开发者使用。Object.defineProperty就是其中一个,此方法会可直接在一个对象上定义一个新的具有详细描述的属性,或者修改一个对象的现有属性,并返回这个对象。

 // Object.defineProperty(对象,属性,描述符)
        // 描述符对 对象的属性进行详细的描述:
        //     数据描述符:
        //         value:'xxx'  属性值 默认''
        //         writable:true 是否可写 默认false
        //         configurable:true 是否可配置 默认false
        //         enumerable:true 是否可枚举 默认false
        //     存取描述符:
        //         get:function(){}属性访问器,进行写操作时调用该方法
        //         set:function(){}属性访问器,进行读操作时调用该方法

        var obj = {

        }
        Object.defineProperty(obj, 'name', {
            value: 'aaa',
            writable: false ,
            configurable: true ,
            enumerable: true 
        });

        obj.name = 10
        console.log(obj.name)  //aaa

        for(var prop in obj){
            console.log(prop)  //name
        }

        delete obj.name
        console.log(obj.name)  //undefined

    value,writable和get,set方法同时存在时会出现异常,不能同时使用,

  var obj = {

        }
        var tempVale = 'aaa'
        Object.defineProperty(obj, 'name', {
            //这两个属性不能喝get,set共存
            // value: 'aaa',
            // writable: false ,
            configurable: true,
            enumerable: true,
            get: function () {
                return tempVale
            },
            set: function (newValue) {
                tempVale = newValue
            },
        });
        //走get方法,返回值为aaa
        console.log(obj.name)//aaa
        //走set方法,复制
        obj.name = 10
        //走get方法,返回值为10
        console.log(obj.name)//10

get和set是双向数据绑定的核心方法,主要做数据劫持(监控属性变化),同时也是ES6中很多语法糖底层实现的核心方法

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!