Object.defineProperty()

Object.defineProperty()是JavaScript中一个内置函数,用于定义一个对象的属性。它接受三个参数:

  1. 需要定义属性的对象
  2. 属性的名称
  3. 属性的描述符对象

属性描述符对象有两种形式:数据描述符和存取描述符。

数据描述符包括以下可选键:

  • value:属性的值,默认为undefined
  • writable:属性的值是否可被修改,默认为false
  • enumerable:属性是否可被枚举,默认为false
  • configurable:属性是否可被删除或修改特性,默认为false

存取描述符包括以下可选键:

  • get:获取属性值的方法,默认为undefined
  • set:设置属性值的方法,默认为undefined
  • enumerable:属性是否可被枚举,默认为false
  • configurable:属性是否可被删除或修改特性,默认为false

以下是使用Object.defineProperty()定义属性的示例:

const obj = {};

// 定义一个数据描述符
Object.defineProperty(obj, 'name', {
  value: 'John',
  writable: true,
  enumerable: true,
  configurable: true
});

console.log(obj.name);  // 输出: John
obj.name = 'Jane';
console.log(obj.name);  // 输出: Jane

// 定义一个存取描述符
Object.defineProperty(obj, 'age', {
  get() {
    return this._age;
  },
  set(value) {
    if (value > 0) {
      this._age = value;
    } else {
      console.log('年龄必须为正数');
    }
  },
  enumerable: true,
  configurable: true
});

console.log(obj.age);  // 输出: undefined
obj.age = -30;  // 输出: 年龄必须为正数
obj.age = 30;
console.log(obj.age);  // 输出: 30

上述示例中,通过Object.defineProperty()方法分别定义了obj对象的name和age属性。其中name属性为数据描述符,具有可修改、可枚举和可删除特性;age属性为存取描述符,具有可枚举和可删除特性,并且通过get和set方法定义了属性的获取和设置行为。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值