object.definepProperty使用方法,vue2双向绑定原理

首先要介绍的是definepProperty的三个参数

javascript 复制代码
object.definepProperty(对象名,属性名,属性值)

再者要介绍的就是属性值了,

javascript 复制代码
object.definepProperty(person,age,{value:18})

此时我们会遇到如下几个问题

一、第一,我们添加的这个属性名,不可被枚举

javascript 复制代码
object.definepProperty(person,age,{value:18})

object.keys(person)

for(var item in person){
    console.log(item)
}

解决方法:

我们为其添加可枚举属性。enumerable:true,默认值是false

javascript 复制代码
Object.defineProperty(obj, 'age', {
  value: "18",
  enumerable: true
});

二、第二,我们添加的这个属性名,不可被修改

javascript 复制代码
object.definepProperty(person,age,{
value:18
enumerable:true
})

person.age =20

解决方法:添加writeable:true(可以被修改)属性,默认值false(不可被修改)

javascript 复制代码
object.definepProperty(person,age,{
value:18,
enumerable:true, //控制属性是否可以枚举,默认值是false
writeable:true // 控制属性是否可以被修改,默认值是false
})

person.age =20

三、第三,我们添加的这个属性名,不可被删除

javascript 复制代码
object.definepProperty(person,age,{
value:18,
enumerable:true, //控制属性是否可以枚举,默认值是false
writeable:true // 控制属性是否可以被修改,默认值是false
})

delete person.age 
//或者
delete person['age']

解决方法:添加configurable:true(可以被删除),默认值false(不可被删除)

javascript 复制代码
Object.defineProperty(person.age,{
value:18,
enumerable:true, //控制属性是否可以被枚举,默认值false
writerable:true,  // 控制属性是否可以被修改,默认值false
configrable:true //控制属性是否可以被删除,默认值false
})

四、get(gtter)和set(setter)用法

1.当要将另一个变量的值number赋值给age时候,当改变number的值的时候,对象中age的值并没有发生改变

javascript 复制代码
number=10

person={
age:number
}
// {age:10}

number =12

//{age:10}

解决,此时我们就要用到get()函数来实现,get的返回值,就是age的值

get():当有人读取person的age属性时,就会调用get()方法,此时number现在的值就会赋值给age

javascript 复制代码
object.definepProperty(person,age,{
    get(){
        return number
    }
})

2.当有人给age赋值时候,但是age的值没有改变,这是因为age的值是number

javascript 复制代码
var number =10

person={
    age:number
}
person.age =20
// {age:10}

解决方法:使用set()函数,获取到age改变的值,然后赋值给number

set():当有人改变age 的时候,获取到改变的值,赋值给number,此时我们再次获取age时候,就会调用get()把number的值赋值给age

javascript 复制代码
object.definepProperty(person,age,{
    // 当有人获取age时候,就会调用get()
    get(){
        return number
    },
    //当有人改变age的时候,就会调用set()
    set(value){
    number = value
}
})
相关推荐
安之若素^10 分钟前
启用不安全的HTTP方法
java·开发语言
一个天蝎座 白勺 程序猿27 分钟前
Python(28)Python循环语句指南:从语法糖到CPython字节码的底层探秘
开发语言·python
持梦远方1 小时前
C 语言基础入门:基本数据类型与运算符详解
c语言·开发语言·c++
abigale031 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
zzywxc7871 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
专注API从业者1 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
Joker`s smile1 小时前
Chrome安装老版本、不同版本,自制便携版本用于前端调试
前端·chrome
weixin_416639971 小时前
爬虫工程师Chrome开发者工具简单介绍
前端·chrome·爬虫
我是如子啊1 小时前
【解决“此扩展可能损坏”】Edge浏览器(chrome系列通杀))扩展损坏?一招保留数据快速修复
前端·chrome·edge
灵性花火1 小时前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt