Object.defineProperty 的主要用例是什么?
What are the main use cases of Object.defineProperty?
我在 Javascript 教科书中阅读了有关 数据属性 的内容,并想象仅将 Object.defineProperty
与 访问器属性[= 结合使用21=].
Object.defineProperty 设置属性的其他主要用例是什么:[[Enumerable]]
、[[Writable]]
、[[Configurable]]
?它在框架中使用吗?出于什么原因?是否在客户端应用程序中使用?
Object.defineProperty
通常用于使用相关方法 Object.getOwnPropertyNames()
和 Object.getOwnPropertyDescriptor()
将 属性 描述符从一个对象复制到另一个对象,例如将事物合并到原型中时。
正如您已经提到的,它们可用于 getter 和 setter。对象字面量语法仅在创建新对象时有效。要在现有对象(例如原型)中创建新的 getters/setters,您必须使用 Object.defineProperty()
,或复制描述符,如上所述。
[[Enumerable]]
有助于通过 Object.keys()
、for ... in 循环避免枚举、向数组子类添加属性等。
这在向内置原型添加 polyfill 时非常重要,尤其是 Object.prototype
因为您不希望添加的方法突然出现在循环中,因为它可能会破坏其他不执行 .hasOwnProperty()
的代码检查。
[[Writable]], [[Configurable]]
就启用新的编程风格而言,这些并不是真正的 "useful",但它们是健全的功能,可让您创建不会被意外覆盖或删除的只读属性。是的,这对图书馆来说很棒。
Object.freeze()
/ .seal()
/ .preventExtensions()
将这种保护进一步扩展到可以充分保护对象的程度,从而通过保护创建稍微安全的 javascript eval 沙箱内置对象的原型。
我在 Javascript 教科书中阅读了有关 数据属性 的内容,并想象仅将 Object.defineProperty
与 访问器属性[= 结合使用21=].
Object.defineProperty 设置属性的其他主要用例是什么:[[Enumerable]]
、[[Writable]]
、[[Configurable]]
?它在框架中使用吗?出于什么原因?是否在客户端应用程序中使用?
Object.defineProperty
通常用于使用相关方法 Object.getOwnPropertyNames()
和 Object.getOwnPropertyDescriptor()
将 属性 描述符从一个对象复制到另一个对象,例如将事物合并到原型中时。
正如您已经提到的,它们可用于 getter 和 setter。对象字面量语法仅在创建新对象时有效。要在现有对象(例如原型)中创建新的 getters/setters,您必须使用 Object.defineProperty()
,或复制描述符,如上所述。
[[Enumerable]]
有助于通过 Object.keys()
、for ... in 循环避免枚举、向数组子类添加属性等。
这在向内置原型添加 polyfill 时非常重要,尤其是 Object.prototype
因为您不希望添加的方法突然出现在循环中,因为它可能会破坏其他不执行 .hasOwnProperty()
的代码检查。
[[Writable]], [[Configurable]]
就启用新的编程风格而言,这些并不是真正的 "useful",但它们是健全的功能,可让您创建不会被意外覆盖或删除的只读属性。是的,这对图书馆来说很棒。
Object.freeze()
/ .seal()
/ .preventExtensions()
将这种保护进一步扩展到可以充分保护对象的程度,从而通过保护创建稍微安全的 javascript eval 沙箱内置对象的原型。