首页 > 其他分享 >JS中【Object.defineProperties】知识点介绍

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

时间:2024-08-16 15:54:35浏览次数:13  
标签:知识点 false defineProperties Object 描述符 true 属性

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

标签:知识点,false,defineProperties,Object,描述符,true,属性
From: https://blog.csdn.net/2301_79858914/article/details/141262198

相关文章

  • JS中【回调函数】知识点讲解
    回调函数(CallbackFunction)是JavaScript中非常重要的概念,尤其是在处理异步操作时广泛使用。回调函数是一种通过参数传递的函数,在特定的操作或事件完成后,由另一个函数调用执行。基本概念函数作为参数:在JavaScript中,函数是一等公民,可以像变量一样传递给其他函数。当......
  • SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结
    目录1、SpringBoot的事务管理2、SpringBoot的异步任务3、SpringBoot定时任务调度4、SpringBoot整合Mail发送邮件5、Spring框架中的Bean的作用域6、Spring框架中的Bean的线程安全7、Spring框架中的Bean生命周期8、Spring框架如何解决循环依赖?9、Spring框架中有哪些注......
  • 深入解析Objective-C中NSParagraphStyle的段落样式处理艺术
    标题:深入解析Objective-C中NSParagraphStyle的段落样式处理艺术在Objective-C的世界中,文本排版是一个复杂但至关重要的话题。NSParagraphStyle作为其中的核心组件,扮演着决定文本段落外观和布局的关键角色。本文将深入探讨NSParagraphStyle的内部机制,并通过实际代码示例,展示......
  • 解锁文本奥秘:NSLinguisticTagger在Objective-C中的语言分析之旅
    标题:解锁文本奥秘:NSLinguisticTagger在Objective-C中的语言分析之旅引言在Objective-C的丰富生态中,NSLinguisticTagger扮演着自然语言处理的重要角色。它提供了一套强大的API,用于对文本进行分词和标注,帮助开发者理解文本的结构和含义。本文将深入探讨NSLinguisticTagger的......
  • java中运算符的详细知识点
    算数运算符a++先赋值再加1++a先加1在赋值--的道理是一样的赋值运算符1.=+=-=*=/=%=当=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则支持连续赋值=+=-=*=/=%=不会改变基础类型测试一下:比较运算符运算结果为布尔类型==!=适......
  • WebApi 简单使用 JObject,可以省掉自定义的class类
    post提交的json数据:{"name":"Jason","age":18,"color":"blue"}usingNewtonsoft.Json.Linq;[HttpPost("testpost")]publicstringTestPost([FromBody]Objectinput){......
  • 《python程序语言设计》2018版第7章第2题创建一个stock类,一个公司股票。创建stock,包含
    使用百分比法计算股票变化值百分比法是计算股票变化值的常用方法。具体操作是:将当前股票价格与前一交易日的股票价格进行比较,计算出价格变动的百分比。公式为:(当前价格-前一交易日价格)/前一交易日价格×100%。这种方法简单明了,可以快速得出股票变化的百分比。......
  • [Design Pattern] Value Object
    ProblemtoSolveReparesentavaluethatisimmutableanddistinctfromotherobjectsbasedonitspropertiesratherthanitsidentity. SolutionCreateaclasswhereinstancesareconsideredequalifalltheirpropertiesareequalsandensuretheobject......
  • osg,objectarx及occt之间矩阵的转换
    osg的矩阵表达形式为osg::MatrixObjectArx的矩阵表达式为AcGeMatrix3docct的矩阵表达式分gp_Trsf及支持变形的gp_GTrsf osg矩阵转化为ObjectArxosg::MatrixmVPW;TcGeMatrix3dmatrix;for(inti=0;i<4;++i){for(intj=0;j<4;++j){matr......
  • Redis所有知识点(只读这一篇就够了)
    博主制作不易,感谢宝子们支持,有问题可以私我哦!(一)redis开篇(二)缓存穿透(恶意攻击)缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查询数据库缓存空数据解决方案一:缓存空数据,查询返回的数据为空,然后把这个空结果进行缓存......