Object.defineProperty的主要用例是什么
What are the main use cases of Object.defineProperty?
我已经阅读了Javascript教科书中的数据属性,并设想仅将Object.defineProperty
与访问器属性结合使用。
Object.defineProperty设置属性的其他主要用例是什么:[[Enumerable]]
、[[Writable]]
、[[Configurable]]
?它在框架中使用过吗?原因是什么?它是否用于客户端应用程序?
Object.defineProperty
通常用于使用相关方法Object.getOwnPropertyNames()
和Object.getOwnPropertyDescriptor()
将属性描述符从一个对象复制到另一个对象,例如在将事物合并到原型中时。
正如您已经提到的,它们可以用于getter和setter。对象文字语法仅在创建新对象时有效。要在现有对象(例如原型)中创建新的getter/setter,必须使用Object.defineProperty()
,或者复制描述符,如上所述。
[[Enumerable]]
有助于避免通过Object.keys()
枚举,例如。。。在循环中,向数组子类添加属性等等。当向内置原型(尤其是Object.prototype
)添加polyfill时,这一点非常重要,因为您不希望添加的方法突然出现在循环中,因为它可能会破坏其他不进行.hasOwnProperty()
检查的代码。
[[可写入]]、[[可配置]]
从启用新编程样式的意义上来说,这些并不是真正的"有用",但它们是健全功能,允许您创建只读属性,这些属性不会被意外覆盖或删除。所以,是的,这对图书馆来说很好。
Object.freeze()
/.seal()
/.preventExtensions()
进一步扩展了这种保护,您可以通过保护内置对象的原型来充分保护对象,从而创建一些安全的javascript eval沙盒。
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 我的客户端选项是什么
- 这是什么“;要求“;事情
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- @@(“at at”)在ES6 JavaScript中是什么意思
- knex:根据结果创建数组的合适方法是什么
- JSDoc:模块和名称空间之间的关系是什么
- minimy javascript是什么意思?Backbone.js