object.defineproperty()缺点,vue defineproperty
本文主要介绍了对Vue中Object.defineProperty的全面理解,具有很好的参考价值。希望对你有帮助。如有错误或不足之处,请不吝赐教。
目录
Object.defineProperty了解直接添加getter和setter需要Object.defineProperty()注意
Object.defineProperty理解
定义:Object.defineProperty()方法会直接在一个对象上定义一个新的属性,或者修改一个对象的已有属性并返回这个对象。
直接添加
let person={
姓名:张三,
性别:“男性”,
}
Object.defineProperty(person, age ,{
值:18,
Enumerable:true,//控制属性是否可以枚举。默认值为false。当属性的值为true时,该属性将出现在对象的枚举属性中。
Writetable: true,//控制是否可以修改属性。默认值为false。当此属性的值为true时,它只能由赋值运算符来更改。
Configurable:true,//控制属性是否可以删除。默认值为false。当属性的值为真时,可以从相应的对象中删除该属性。
})
console.log(人);
使用getter、setter
设age _ number=18
let person={
姓名:张三,
性别:“男性”,
}
Object.defineProperty(person, age ,{
//值:18,
//enumeratable:true,//控制属性是否可以枚举。默认值为false,当属性的值为true时,该属性将出现在对象的枚举属性中。
///writable:true,//,//控制属性是否可以修改。默认值为false。当此属性的值为true时,可以通过赋值运算符来更改它。
//configurable:true,//控制属性是否可以删除。默认值为false。当属性的值为真时,可以从相应的对象中删除该属性。
get(){
Console.log(读取年龄属性);
返回age _ number
},
设置(值)
{
Console.log(修改年龄的值);
age _ number=value
}
})
console.log(人);
需要Object.defineProperty()注意点
1.当使用Object.defineProperty方法创建新属性时,如果不指定configurabel、enumberable和writable属性的默认值都为false,则修改已定义的属性properties没有限制。
2.可配置属性被定义为不可配置的,因此它不能改回可配置。此时,调用Object.defineProperty来修改除可写之外的特性将会出错。
3.模拟访问和设置的行为:如果希望accessor属性模拟默认行为,必须在其中添加一个新属性,否则会导致循环引用。
var obj={
答:1
};
Object.defineProperty(obj, a ,{
get:function(){
返回this.a
},
集合:函数(val){
这个=val
}
});
obj.a//超出了最大调用堆栈大小
会造成循环引用,疯狂调用。
person.a get.call(人) this.a person.a get.call(人) this.a.
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。