JS中【Object.defineProperties】知识点介绍

在 JavaScript 中,Object.defineProperties() 是一个非常强大的方法,用来一次性定义或修改一个对象的多个属性的属性描述符。下面是关于 Object.defineProperties() 的详细讲解。

基本语法

Object.defineProperties(obj, props)
  • obj:要定义或修改属性的目标对象。
  • props:一个对象,其中每个属性的键对应于要定义或修改的目标对象的属性,值为包含属性描述符的对象。

属性描述符

每个属性描述符对象可以包含以下属性:

  • value: 属性的值。可以是任何类型的 JavaScript 值。
  • writable: 一个布尔值,表示属性的值是否可以被修改。如果设置为 false,该属性的值就不能再被更改。默认值为 false
  • enumerable: 一个布尔值,表示属性是否会出现在对象的枚举属性中(例如 for...in 循环中)。默认值为 false
  • configurable: 一个布尔值,表示是否可以删除属性或更改属性的属性描述符(除了 writable)。默认值为 false
  • get: 一个函数,作为属性的 getter,返回属性的值。当访问该属性时调用。没有 getter 时,默认值为 undefined
  • set: 一个函数,作为属性的 setter,设置属性的值。当给该属性赋值时调用。没有 setter 时,默认值为 undefined

示例

下面是一个使用 Object.defineProperties() 来定义多个属性的示例:

const person = {};

Object.defineProperties(person, {
    firstName: {
        value: 'John',
        writable: true,
        enumerable: true,
        configurable: true
    },
    lastName: {
        value: 'Doe',
        writable: true,
        enumerable: true,
        configurable: true
    },
    fullName: {
        get() {
            return this.firstName + ' ' + this.lastName;
        },
        enumerable: true,
        configurable: true
    }
});

console.log(person.fullName); // "John Doe"

属性描述符的应用场景

  1. 防止属性被修改:通过设置 writablefalse,可以防止属性值被更改。
  2. 隐藏属性:通过设置 enumerablefalse,可以隐藏属性,使其不在 for...in 循环或 Object.keys() 中出现。
  3. 防止属性被删除或配置被更改:通过设置 configurablefalse,可以防止属性被删除或修改属性描述符。
  4. 计算属性:通过使用 getset,可以定义动态计算的属性,如上述例子中的 fullName

注意事项

  • 一旦 configurable 设置为 false,就不能再将其改回 true
  • 如果没有提供 writableenumerableconfigurable,它们默认为 false
  • valuegetset 不能同时存在。你要么使用数据描述符(valuewritable),要么使用访问描述符(getset)。

总结

Object.defineProperties() 提供了一个强大且灵活的方式来精确控制对象的属性。它可以让你定义属性的值以及它们的行为,如是否可修改、是否可枚举、是否可删除等,是开发复杂对象时非常有用的工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值