Object.defineProperty方法 使用

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

语法:

Object.defineProperty(obj, prop, descriptor):

obj:要在其上定义属性的对象。

prop:要定义或修改的属性的名称。

descripto:将被定义或修改的属性描述符

 

属性描述符

 

对象里目前存在的属性描述符有两种主要形式:数据描述符 和 存取描述符

数据描述符:是一个具有值的属性,该值可能是可写的,也可能不是可写的。

存取描述符:是由getter-setter函数对描述的属性

 

configurable
当且仅当该属性的 configurable 为 true 时,该属性 描述符才能够被改变,同时该属性也能从对应的对象上被删除。 默认为 false
enumerable
当且仅当该属性的 enumerabletrue时,该属性才能够出现在对象的枚举属性中。 默认为 false

 

数据描述符同时具有以下可选键值:

 

value
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。 默认为 undefined
writable
当且仅当该属性的 writabletrue时, value才能被 赋值运算符改变。 默认为 false

 

 

get

  一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined

set

  一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined

描述符可同时具有的键值

     configurable enumerable  value  writable  get  set

数据描述符  Yes        Yes    Yes   Yes     No   No

存取描述符  Yes        Yes    No   No     Yes  Yes

 

注意:如果一个描述符不具有value,writable,get 和 set 任意一个关键字,那么它将被认为是一个数据描述符。如果一个描述符同时有(value或writable)和(get或set)关键字,将会产生一个异常。

 

function Archiver() {
  var temperature = null;
  var archive = [];

  Object.defineProperty(this, 'temperature', {
    get: function() {
      console.log('get!');
      return temperature;
    },
    set: function(value) {
      temperature = value;
      archive.push({ val: temperature });
    }
  });

  this.getArchive = function() { return archive; };
}

var arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 11;
arc.temperature = 13;
arc.getArchive(); // [{ val: 11 }, { val: 13 }]

 

 

 

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

 

转载于:https://www.cnblogs.com/flxy-1028/p/9148975.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值