在 JavaScript 中,Object 对象是所有对象的基类,它为所有对象提供了一些通用的方法和属性。为了满足不同场景下的需求,ES6 新增了一个 Object 方法 Object.getOwnPropertyDescriptor()
,它可以获取一个对象自身属性的描述符,详细展示属性的各种特性。本文将详细介绍这个方法的用法及应用。
相关概念
在了解 Object.getOwnPropertyDescriptor()
方法之前,我们需要了解下面几个概念:
属性特性(Property Attributes):指的是属性的可枚举性、可配置性、可写性和值。这些特性可以通过 Object.getOwnPropertyDescriptor() 方法获取到。
数据属性(Data Property):指具有一个值的属性。它具有一个 [[Value]]、一个 [[Writable]],一个 [[Enumerable]] 和一个 [[Configurable]]。
访问器属性(Accessor Property):指不具有值,而是由一对 getter/setter 函数(或其中的一个)描述的属性。它具有一个 [[Get]]、一个 [[Set]]、一个 [[Enumerable]] 和一个 [[Configurable]]。
方法介绍
Object.getOwnPropertyDescriptor()
方法获取指定对象上一个自有属性(即不是继承来的)对应的属性描述符对象。属性的描述符对象包含以下属性:
- value:属性的值(仅针对数据属性)。
- writable:属性是否可写(仅针对数据属性)。
- enumerable:属性是否可枚举。
- configurable:属性是否可配置。
- get:获取函数,使用
obj.propertyName
时调用(仅针对访问器属性)。 - set:设置函数,使用
obj.propertyName = value
时调用(仅针对访问器属性)。
// Object.getOwnPropertyDescriptor() 方法语法 Object.getOwnPropertyDescriptor(obj, prop);
参数说明:
obj
:要获取属性的对象。prop
:要获取的属性名。
返回值:表示属性描述符的对象。
应用示例
下面通过一些示例来阐述 Object.getOwnPropertyDescriptor()
方法的用法及应用。
示例1:获取数据属性的描述符
-- -------------------- ---- ------- ----- ------ - - ----- ------ ---- --- -- ----- ---------- - --------------------------------------- ------- ------------------------ -- --- - ------ --- --------- ----- ----------- ----- ------------- ---- - --
示例2:获取访问器属性的描述符
-- -------------------- ---- ------- ----- ------ - - ------ ------ --- ------ - ------ ----------- -- --- --------- - ---------- - ---- -- -- ----- ---------- - --------------------------------------- -------- ------------------------ -- --- - ---- - ------- ---- - ---------- ----------- ----- ------------- ---- - --
示例3:修改属性描述符
-- -------------------- ---- ------- ----- ------ - - ----- ------ ---- --- -- -- -- --- - -------- --- ----- ----------------------------- ------ - --------- ------ --- ---------- - --- ------------------------ -- --
示例4:判断属性是否可枚举
const person = { name: 'Tom', age: 20, }; console.log(person.propertyIsEnumerable('name')); // true console.log(person.propertyIsEnumerable('toString')); // false
以上代码 person.propertyIsEnumerable()
方法检查所传入的属性名是否在 person
对象中存在并且是否可枚举。'name' 属性是自有属性,且可以枚举,所以返回 true。toString() 这个方法是从 Object 原型中继承来的,不是自有属性,所以返回 false。
总结
Object.getOwnPropertyDescriptor()
方法是比较常用的一个方法,它可以获取对象上自有属性的各种描述符。通过返回的属性描述符对象,我们可以判断属性的可枚举性、可写性、可配置性以及属性值等内容。我们可以运用它来判断属性是否存在、并修改属性特性等操作。正确认识这个方法的准确用法,可以在日常开发中帮助我们更好地理解 JavaScript 对象的特性和行为。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ee8d57f6b2d6eab3885d1a