如果在脚本的加载阶段,使用Object.defineProperty,Object.defineProperties或Object.create定义了许多属性。并且大多数描述符要么是不可写的(如果不是访问者),不可配置的,不可枚举的或组合的。相对于常规赋值或对象初始化,如果有的被动性能差异和访问目标属性的性能差异是什么?
我听说定义不可写和/或不可配置的属性涉及设置防范以防止写入和/或重新定义将是性能损失的一个原因,这是真的吗?
定义示例:
Object.defineProperty(window, 'foo', {
configurable: false,
enumerable: false,
writable: false,
value: 10
});
答案 0 :(得分:1)
使用Object.defineProperty / defineProperties创建属性肯定比仅仅分配它们要慢。 (多少?取决于。测量!使基准测试相关的最佳方法是使它们与您感兴趣的实际用例尽可能相似。理想情况下,您可以测量实际生产代码的不同版本。)
无论属性的定义如何,读取属性都具有相同的速度。
写入现有属性必须始终检查可写性,正是因为它无法知道是否使用了foo.bar = baz
或Object.defineProperty(foo, "bar", {value: baz})
。所以速度也一样。
没有特别警卫。