Object.defineProperty的主要用例是什么?

时间:2015-02-04 16:10:27

标签: javascript object ecmascript-5

我在Javascript教科书中读到了数据属性,并想象Object.defineProperty仅与访问者属性结合使用。

Object.defineProperty设置属性的其他主要用例是什么:[[Enumerable]][[Writable]][[Configurable]]?它是否在框架中使用?出于什么原因?它是否用于客户端应用程序?

1 个答案:

答案 0 :(得分:3)

Object.defineProperty通常可用于使用相关方法Object.getOwnPropertyNames()Object.getOwnPropertyDescriptor()将属性描述符从一个对象复制到另一个对象,例如将事物合并到原型中时。

正如您已经提到的,它们可以用于吸气剂和固定剂。对象文字语法仅在创建新对象时有效。要在现有对象(例如原型)中创建新的getter / setter,您必须使用Object.defineProperty(),或复制描述符,如上所述。

  

[[可枚举]]

有助于避免通过Object.keys()枚举,for ... in循环,向数组子类添加属性等。 将polyfill添加到内置原型时非常重要,尤其是Object.prototype,因为您不希望添加的方法突然出现在循环中,因为它可能会破坏其他代码而不会执行.hasOwnProperty()检查。

  

[[可写]],[[可配置]]

在启用新编程样式的意义上,这些并不是真正“有用”,但它们是健全功能,允许您创建无法被意外覆盖或删除的只读属性。所以是的,这对图书馆来说很棒。

Object.freeze() / .seal() / .preventExtensions()进一步扩展此类保护,使您可以通过保护内置原型来充分保护对象,从而创建一些安全的javascript eval沙箱在对象中。