• javascript的Object对象的defineProperty和defineProperties


    Object的属性

    查看官网:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object
    
    第一段代码:
    var person={};
    Object.defineProperty(person,'name',{
        configurable:true,//能否使用delete、能否修改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
        enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
        //writable:true,//对象属性是否可修改,flase为不可修改,默认值为true
        //value:'huang', //对象属性的默认值,默认值为undefined
        set:function(newValue){
            this.name=newValue;
        },
        get:function(){
            return this.name;
        }
    });
    
    当get,set出现的时候不能出现value和writable,
    否则报错:Uncaught TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>
        at Function.defineProperty (<anonymous>)
        at <anonymous>:2:8
    
    
    
    
    
    第二段代码:
    var waterfall={};
    Object.defineProperty(waterfall,'name',{
        configurable:true,//能否使用delete、能否修改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
        enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
        //writable:true,//对象属性是否可修改,flase为不可修改,默认值为true
        //value:'huang', //对象属性的默认值,默认值为undefined
        set:function(newValue){
            this.name=newValue;
        },
        get:function(){
            return "Namess"+this.name;
        }
    });
    问题:这段代码会报错,因为在set和get函数里出现了this.name= 和 return 里有this.name
    导致一直循环递归无法停止,才报错的。
    类似于:
        function a() {
            a();
        }
    调用a,会无限循环。
    
    解决办法是:
    var waterfall={};
    Object.defineProperty(waterfall,'name',{
        configurable:true,//能否使用delete、能否修改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
        enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
        //writable:true,//对象属性是否可修改,flase为不可修改,默认值为true
        //value:'huang', //对象属性的默认值,默认值为undefined
        set:(newValue)=>{
            this.name=newValue;
        },
        get:()=>{
            return "Namess"+this.name;
        }
    });
    
    
    
    
    
    Object.defineProperties(object, props)
    参数
    object: 定义的对象
    props: 添加的属性, key和 value 分别Object.defineProperty 中的第二和第三个参数。
    例子:
    
    let waterfall={};
    Object.defineProperties(waterfall,{
        name:{
            configurable:true,
            enumerable:true,
            set:(val)=>{
                this.name=val
            },
            get:()=>{
                return this.name
            }
        },
        age:{
            configurable:true,
            enumerable:true,
            set:(val)=>{
                this.age=val
            },
            get:()=>{
                return this.age
            }
        }
    })
    
    
    
    
    Object的6个属性:
    configurable,enumerable,writable,value,setget。
    
    
    Object.observe已经被废弃。
    Object.keys(waterfall) //[ 'name', 'age' ]
  • 相关阅读:
    基础理论:多线程、多进程、并行、并发
    Node: 使用nvm切换node版本
    python: is 和 == 的区别
    React:TypeError: Cannot read properties of undefined (reading 'map')
    pycharm: 注释自动生成
    前端包管理工具概览
    UE4蓝图学习
    mysql kill process解决死锁
    【分享】VCK190 PCIe QDMA 通用数据传输参考设计
    对Linux kernel代码格式重排后编译失败
  • 原文地址:https://www.cnblogs.com/wulinzi/p/10400813.html
Copyright © 2020-2023  润新知