Est*_*ask 6 javascript defineproperty
考虑到基本的使用场景,做
foo.bar = 'baz';
Run Code Online (Sandbox Code Playgroud)
和
Object.defineProperty(foo, 'bar', {
value: 'baz',
configurable: true,
enumerable: true,
writable: true
});
Run Code Online (Sandbox Code Playgroud)
在支持的浏览器中表现完全相同?
我们是否可以仅仅因为有利的语法而在 ES6 之前的应用程序中回退到 vanilla,或者将它们混合在一起而没有任何副作用?
是的,当
bar属性foo(甚至没有继承的属性),因此创建一个新的属性,或者bar属性的writable和configurable属性设置为true然而,如果两者都没有给出,则两者确实会产生略有不同的结果。
defineProperty不考虑继承的属性及其描述符definePropery将使用数据描述符覆盖该属性(如果它是一个自己的不可配置的属性,则分配将失败) )writable如果现有的继承属性是数据属性,则如果为 false,则赋值将失败,如果为 true,则创建一个新的自有属性,就像defineProperty总是那样writable为 false,则赋值将失败,如果为 true,则设置新值;如果为 false,defineOwnProperty则赋值将失败configurable,否则将覆盖属性。考虑基本使用场景
如果“基本用法”意味着不使用花哨的属性,那么是的,它们是等效的。然而,您应该只使用简单的作业,因为它们更易于阅读且执行速度更快。
我们可以在 ES6 之前的应用程序中回退到普通版本吗
请注意,ES5 附带完全支持defineProperty,因此除非您需要考虑 ES5 之前的(旧 IE)浏览器,否则您根本不会关心。