js中defineProperty方法说明

今天在工作中看到这样一段代码, 又是我看不太明白的 所以想去熟悉下defineProperty方法, 并且通过博客记录下, 以便以后复习
熟悉的看不太明白的代码
只要疑惑还是对js的Api不太熟悉, 下面来看下这个defineProperty方法吧

看了一眼官方的解释有点懵逼, 只知道是用来定义对象属性的(因为方法名就叫定义属性 哈哈)
在这里插入图片描述
来撸一下

基本语法: Object.defineProperty(obj, prop, descriptor)

  1. 参数(obj): 被操作的对象本身
  2. 参数(prop): 属性名称, 指定对象要修改或者新增的属性名
  3. 参数(descriptor): 对属性的描述(如 value指定属性的值)
descriptor属性详解:
  1. value: 需要设置属性的值(默认为 undefined)
  2. writable: 该属性是否为可修改的(默认为 false)
  3. configurable: 是否可以配置descriptor中的属性是否可以修改(默认为 false 除了 value和writable属性外)
  4. enumerable: 该属性是否可枚举(默认为false)
  5. set(): 该属性修改时会调用此函数(默认为undefined)
  6. get(): 该属性获取时 会调用此函数(默认为undefined)

然后来段代码看下吧

writable属性:

在这里插入图片描述

因为writable属性默认为false 指定的属性默认不可改变 所以陈狗蛋还是陈狗蛋不能变成刘德华
然而 将writable改为false 陈狗蛋就变成了了刘德华
在这里插入图片描述
当writable为false的时候, 如果再次使用defineProperty的方法改变属性 将会报错 为true的时候则是可以的
在这里插入图片描述
在这里插入图片描述

enumerable属性:

enumerate规定了对象属性是否可以在 for…in循环和 Object.keys()中被枚举
在这里插入图片描述
这个看结果就很显而易见了
在这里插入图片描述
改成true 就可以将name属性枚举出来了
在这里插入图片描述
在这里插入图片描述

configurable属性:

定义了是否可以修改除了writable 和 value以外其他特性是否可以被修改 以及该属性是否能被修改
下面为configurable为false的执行情况
在这里插入图片描述
当configurable设为true是 enumerable和configurable特性是能够被正常修改的 delete person.name也会生效 所以最后的console.log(person.name) 为 undefined

set 和 get方法:

这个是重点了 可是使用她们实现双向绑定, 先来撸一下最基本的get和set
在这里插入图片描述
我们可以看出 当我们使用对象.属性这种方式给属性赋值的时候 set() 方法监听到了这个操作,于是我们可以在set里面进行一些操作 实现基本的双向绑定 get也是同理 在获取属性的时候get() 可以监听到这个操作 如下可以实现一个简单的双向绑定
在这里插入图片描述
写到这里开头的疑问也可以解答这段代码了 由于用户是否授权属于比较隐私的属性 为了防止用户直接在console中使用$app.authorized直接修改授权状态 所以使用defineProperty方法将属性设为只读 防止恶意访问
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值