Vue中的Object.defineProperty全面理解
作者:godkzz 发布时间:2024-05-29 22:44:02
标签:Vue,Object,defineProperty
Object.defineProperty理解
定义:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
直接添加
let person = {
name:'张三',
sex:'男',
}
Object.defineProperty(person,'age',{
value:18,
enumerable:true,//控制属性是否可以枚举,默认值是false,当该属性的值为 true 时,该属性才会出现在对象的枚举属性中。
writable:true,//控制属性是否可以被修改,默认值是false,当该属性的值为 true 时,才能被赋值运算符改变。
configurable:true,//控制属性是否可以被删除,默认值是false,当该属性的值为 true 时,该属性能从对应的对象上被删除。
})
console.log(person);
使用getter、setter
let age_number = 18;
let person = {
name:'张三',
sex:'男',
}
Object.defineProperty(person,'age',{
//value:18,
//enumerable:true,//控制属性是否可以枚举,默认值是false,当该属性的值为 true 时,该属性才会出现在对象的枚举属性中。
//writable:true,//控制属性是否可以被修改,默认值是false,当该属性的值为 true 时,才能被赋值运算符改变。
//configurable:true,//控制属性是否可以被删除,默认值是false,当该属性的值为 true 时,该属性能从对应的对象上被删除。
get(){
console.log("读取age属性");
return age_number;
},
set(value)
{
console.log("修改age的值");
age_number = value;
}
})
console.log(person);
需要Object.defineProperty()注意点
1.用Object.defineProperty方法创建一个新属性时,如果不指定configurabel,enumberable,writable特性的默认值都是false,修改已定义的属性特性无限制。
2.Configurable性定义为不可配置就不能把它变回可配置,此时调用Object.defineProperty修改除writable之外的特性都会报错。
3.模拟访问和设置的行为:想要访问器属性模拟默认行为的话,必须的在里面新添一个属性不然会造成循环引用
var obj={
a:1
};
Object.defineProperty(obj,"a",{
get:function(){
return this.a;
},
set:function(val){
this.a=val
}
});
obj.a;// Maximum call stack size exceeded
会造成循环引用,狂call不止
person.a → get.call(person) → this.a → person.a → get.call(person) → this.a......
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://blog.csdn.net/godkzz/article/details/119666692


猜你喜欢
- dictPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)
- 本文实例讲述了Python打开文件、文件读写操作、with方式、文件常用函数。分享给大家供大家参考,具体如下:打开文件:在python3中,
- MySQL 出现错误1418 的原因分析及解决方法具体错误: 使用mysql创建、调用存储过程,函数以及触发器的时候会有错误符号为
- 内容摘要:图片随机显示是一个应用非常广泛的技巧。比如随机banner的显示,当你进入一个网站时它的banner总是不同的,或者总有内容不同的
- 前言这篇文章主要介绍了pyinstaller打包opencv和numpy程序运行错误解决,文中通过示例代码介绍的非常详细,对大家的学习或者工
- 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理==================DECLARE @
- 最近一直跟着廖大在学Python,关于分布式进程的小例子挺有趣的,这里做个记录。分布式进程Python的multiprocessing模块不
- python / 和 % 和 //(地板除)用于对数据进行除法运算。python中 // 和 / 和 %简介python中与除法相关的三个运
- 一、mysql自连接mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需
- 创建自定义编辑器: //引入editor_config.js,editor_api.js,ueditor.css文件,然后在body中创建编
- 1.lxml库介绍lxml是XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的数据;lxml和正则一样,也是用C语言实现的
- 邮箱地址验证有很多方法。在浏览器端,js邮箱验证可以通过正则表达式检测。比如:function isEmail(email) {
- 本文实例讲述了Java使用JDBC连接数据库的实现方法,是Java数据库程序设计里非常实用的重要技巧。分享给大家供大家参考。具体如下:JDB
- 偶然从pytorch讨论论坛中看到的一个问题,KL divergence different results from tf,kl dive
- 表格内容根据票据日期升序(这里是已经排序后的效果)上代码代码中data的内容如下根据paper_date排序,因为目前这种格式不支持比较,需
- 一.垃圾回收机制Python中的垃圾回收是以引用计数为主,分代收集为辅。引用计数的缺陷是循环引用的问题。在Python中,如果一个对象的引用
- python版本:3.5.4系统:win10 x64通过网页下载视频方法一:使用urllib.retrieve函数放函数只需要两个参数即可下
- 一、牛顿多项式拉格朗日多项式的公式不具备递推性,每个多项式需要单独构造。但很多时候我们需要从若干个逼近多项式选择一个。这个时候我们就需要一个
- 本文实例为大家分享了python实现移动木板小游戏的具体代码,供大家参考,具体内容如下一、游戏简介本游戏是通过python编写的小游戏,给初
- 一、Python函数中的参数1、使用python的函数时,有参数类别,比如位置参数、关键字参数、可变长参数2、位置参数、关键字参数很好理解,