js defineProperty 理解

Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性,

或修改其现有属性,并返回此对象。

语法

Object.defineProperty(obj, prop, descriptor)

参数

obj

要定义属性的对象。

prop

一个字符串或 Symbol,指定了要定义或修改的属性键。

descriptor

要定义或修改的属性的描述符。

configurable

当设置为 false 时,

  • 该属性的类型不能在数据属性和访问器属性之间更改,且
  • 该属性不可被删除,且
  • 其描述符的其他属性也不能被更改(但是,如果它是一个可写的数据描述符,则 value 可以被更改,writable 可以更改为 false)。

默认值为 false

enumerable

当且仅当该属性在对应对象的属性枚举中出现时,值为 true默认值为 false

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

value

与属性相关联的值。可以是任何有效的 JavaScript 值(数字、对象、函数等)。默认值为 undefined

writable

如果与属性相关联的值可以使用赋值运算符更改,则为 true默认值为 false

 下面是一个demo:

// Define an object

const person = {};

// Define a property using Object.defineProperty ,person is obj, name is prop, descriptor is the third parameter

Object.defineProperty(person, 'name', {

  value: 'John',

  writable: false, // Property cannot be changed

  enumerable: true, // Property can be enumerated

  configurable: false // Property cannot be deleted

});

 

// Access the property

console.log(person.name); // Output: John

// Try to change the property value

person.name = 'Jane';

console.log(person.name); // Output: John (value remains the same)

// Enumerate the properties of the object

for (let key in person) {

  console.log(key); // Output: name

}

// Try to delete the property

delete person.name;

console.log(person.name); // Output: John (property cannot be deleted)

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值