object.defineproperty()缺点,vue defineproperty

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: