Vue学习:回顾Object.defineProperty(给对象添加或者定义属性的)

    <script>
        //定义对象
        let person={
            name:'李四',
            sex:"男"

        }
        Object.defineProperty(person,'age',{value:18});//参数:添加属性的对象 添加的属性名 配置项
        console.log(person)
    </script>

 

 颜色不同:说明了age不可以枚举===age属性不参与遍历 

Object.keys(person):对象的所有对象的属性提取出来 作为数组

    <script>
        //定义对象
        let person={
            name:'李四',
            sex:"男"

        }
        Object.defineProperty(person,'age',{value:18});//参数:添加属性的对象 添加的属性名 配置项
       console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
        console.log(person)

发现遍历不到 Object.defineProperty(person,'age',{value:18});//参数:添加属性的对象 添加的属性名 配置项 添加的属性

 使用for in

  for(let key in person){
            console.log(person[key])//遍历数组或者对象
        }

 


那么如何做到可以枚举或者枚举(使用相同的方法,借用配置项) enumerable:true可枚举

enumerable控制属性可枚举 默认false

        //定义对象
        let person = {
            name: '李四',
            sex: "男"

        }
        Object.defineProperty(person, 'age', { value: 18 });//参数:添加属性的对象 添加的属性名 配置项
        console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
        console.log(person)
        for(let key in person){
            console.log(person[key])//遍历数组或者对象
        }
        Object.defineProperty(person, 'dad', { value: "Jhon" ,enumerable:true});//参数:添加属性的对象 添加的属性名 配置项
        console.log(person)


 

直接写:可以更改,但是defineProperty使用这个的属性不可以被更改 需要添加一个属性writable:控制属性是否可以被修改

        //定义对象
        let person = {
            name: '李四',
            sex: "男"

        }
        Object.defineProperty(person, 'age', { value: 18 });//参数:添加属性的对象 添加的属性名 配置项
        console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
        console.log(person)
        for(let key in person){
            console.log(person[key])//遍历数组或者对象
        }
        Object.defineProperty(person, 'dad', { value: "Jhon" ,
        enumerable:true,
        writable:true});//参数:添加属性的对象 添加的属性名 配置项
        console.log(person)

 


正常写可以被删除 但是defineProperty不可以删除

 

 defineProperty里面的属性configurable: true,控制属性是否可以被删除:默认false

        //定义对象
        let person = {
            name: '李四',
            sex: "男"

        }
        Object.defineProperty(person, 'age', { value: 18 });//参数:添加属性的对象 添加的属性名 配置项
        console.log(Object.keys(person))//传入对象 :对象的所有对象的属性提取出来 作为数据
        console.log(person)
        for (let key in person) {
            console.log(person[key])//遍历数组或者对象
        }
        Object.defineProperty(person, 'dad', {
            value: "Jhon",
            enumerable: true,
            writable: true,
            configurable: true,
        });//参数:添加属性的对象 添加的属性名 配置项
        console.log(person)

 


 defineProperty可以对属性增加限制


此方法不行:需要age属性 和读取number的值  

    let number=18;
        //定义对象
        let person = {
            name: '李四',
            sex: "男",
            age:number

        }

 

直接设置遍历值,但是后期更改的时候 不随更改而变化 

 

需要重新执行 person的赋值操作 

 

 需要用到一个defineProperty里面的函数get :

        let number=18;
        //定义对象
        let person = {
            name: '李四',
            sex: "男",
        }
        Object.defineProperty(person, 'age', {
            get:function(){
                return number
            }
         });//参数:添加属性的对象 添加的属性名 配置项
         console.log(person)

    当有人读取该属性的age属性时,get函数就会被调用,且返回值就是age的值(建立了number和peson.age的关联  重新读取 number)

 点击...调用属性getter===get属性+函数

返回值是多少就是多少的值,找getter去询问

重新询问,就会重新调用getter,返回就是ages属性的值 

 

   get:function(){
                return number
            },

简写:一般

 get(){
                return number
            },

get函数建立了number和person的关联,但是没有建立person和number的关联

 

 

set函数=setter就会被调用:当有人修改person的age属性时,返回值就是age的值。且回收到修改的值

读取的还是number的值 所以需要变成重新赋值给number 

        let number = 18;
        //定义对象
        let person = {
            name: '李四',
            sex: "男",
        }
        Object.defineProperty(person, 'age', {
          //  当有人读取该属性的age属性时,get函数就会被调用,且返回值就是age的值
            get() {
                return number
            },
            //简写
            //set函数=setter就会被调用:当有人修改person的age属性时,返回值就是age的值。且回收到修改的值
            set(value) {
                console.log('有人修改了age属性,value=', value);
                number = value;

            }
        });//参数:添加属性的对象 添加的属性名 配置项
        console.log(person)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值