ES9 中新增加了 Object.getOwnPropertyDescriptors()
方法,可以获取一个对象所有自身属性(不包括继承属性)的描述符,包括属性值的可枚举性,可配置性,可写性以及属性值等。这个方法非常实用,但是在某些场景下,代码需要在 ES6 环境下运行,此时我们可以使用 Node.js 模拟实现这个方法。
实现思路
我们可以通过手动遍历对象的所有属性,获取每一个属性的描述符,最终将其组装为一个对象,这个对象就是 Object.getOwnPropertyDescriptors()
返回的对象。
代码实现
function getOwnPropertyDescriptors(obj) { const toReturn = {}; const keys = Object.getOwnPropertyNames(obj); keys.forEach(key => { toReturn[key] = Object.getOwnPropertyDescriptor(obj, key); }); return toReturn; }
我们定义了一个名为 getOwnPropertyDescriptors()
的函数,传入一个对象,通过 Object.getOwnPropertyNames()
方法获取对象所有自身属性的名称,然后通过 Object.getOwnPropertyDescriptor()
获取每个属性的描述符。最后将所有属性的描述符组装到一个新对象中,返回这个对象。
示例
我们通过一个示例来演示这个函数的使用:
-- -------------------- ---- ------- ----- --- - - -- -- -- ------ -- ---- -- ----- ---- - ------------------------------- ------------------
输出结果为:
-- -------------------- ---- ------- - -- - ------ -- --------- ----- ----------- ----- ------------- ---- -- -- - ------ ------ --------- ----- ----------- ----- ------------- ---- -- -- - ------ ----- --------- ----- ----------- ----- ------------- ---- - -
我们可以看到返回的是一个对象,对象的键名为属性名称,对应的值则是描述符对象。在本例子中,我们可以看到对象 obj
的三个属性 a
,b
,和 c
具有相应的描述符,其中 a
和 b
是可写的、可枚举的和可配置的,c
是只读的、可枚举的和可配置的。
总结
Object.getOwnPropertyDescriptors()
方法提供了获取对象所有自身属性的描述符的便利方式。在 ES6 环境下不支持该方法的环境下,我们也可以通过手动遍历对象的所有属性,获取每个属性的描述符来模拟实现这个方法。这篇文章主要介绍了在 Node.js 中如何实现这个方法,同时希望读者可以通过这个方法更深入地理解 JavaScript 对象属性的描述符。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b1ff4948841e9894e560c7