js中的Object.defineProperties

网友投稿 788 2022-11-23

js中的Object.defineProperties

js中的Object.defineProperties

​​Object.defineProperties()​​ 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

语法

​​Object.defineProperties(obj, props)​​

obj

在其上定义或修改属性的对象。

props

要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(更多详情,请参阅​​Object.defineProperty()​​)。描述符具有以下键:

​​configurable​​

​​true​​​ 只有该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。默认为 ​​false​​

​​enumerable​​

​​true​​​ 只有在枚举相应对象上的属性时该属性显现。默认为 ​​false​​

​​value​​

与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。默认为 ​​undefined​​.

​​writable​​

​​true​​​只有与该属性相关联的值被​​assignment operator (en-US)​​​改变时。默认为 ​​false​​

​​get​​

作为该属性的 getter 函数,如果没有 getter 则为​​undefined​​​。函数返回值将被用作属性的值。默认为 ​​undefined​​

​​set​​

作为属性的 setter 函数,如果没有 setter 则为​​undefined​​​。函数将仅接受参数赋值给该属性的新值。默认为 ​​undefined​​

主要用到的是 get 和 set方法

例子: 通过defineProperties添加属性 权限更高

let obj = {}Object.defineProperties(obj, { data: { get() { return { name: '王王王', age: 18 } }, set() { console.log('触发了set') } }})for(let key in obj) { console.log(key + '->' + obj[key]) // 没有打印}console.log(obj.data) // { name: '王王王', age: 18 }console.log(obj.data.name) // 王王王console.log(obj.data.age) // 18obj.data = 1 //触发了set/** * 上面相当于 obj = { * data: { * name: "王王王", * age: 18 * } * } */

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:VUE使用mqtt
下一篇:vite2 + Vue3中axios的封装,代理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~