Reflect.defineProperty()

静态方法 Reflect.defineProperty() 基本等同于 Object.defineProperty() 方法,唯一不同是返回 Boolean 值。

语法

Reflect.defineProperty(target, propertyKey, attributes)

参数

target
目标对象。
propertyKey
要定义或修改的属性的名称。
attributes
要定义或修改的属性的描述。

返回值

 Boolean 值指示了属性是否被成功定义。

异常

如果target不是 Object,抛出一个 TypeError

描述

Reflect.defineProperty 方法允许精确添加或修改对象上的属性。更多的细节请参阅类似的Object.defineProperty 。

区别:Object.defineProperty 返回一个对象,或者如果属性没有被成功定义,抛出一个 TypeError 。 相比之下,Reflect.defineProperty方法只返回一个 Boolean ,来说明该属性是否被成功定义。

示例

使用 Reflect.defineProperty()

let obj = {}
Reflect.defineProperty(obj, 'x', {value: 7})  // true
obj.x                                         // 7

检查属性是否被成功定义

Object.defineProperty 方法,如果成功则返回一个对象,否则抛出一个 TypeError 。另外,当定义一个属性时,你也可以使用 try...catch 去捕获其中任何的错误。而因为 Reflect.defineProperty 返回 Boolean 值作为成功的标识,所以只能使用 if...else

if (Reflect.defineProperty(target, property, attributes)) {
  // 成功
} else {
  // 失败
}

规范

Specification
ECMAScript (ECMA-262)
Reflect.defineProperty

浏览器兼容性

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
definePropertyChrome Full support 49Edge Full support 12Firefox Full support 42IE No support NoOpera Full support 36Safari Full support 10WebView Android Full support 49Chrome Android Full support 49Firefox Android Full support 42Opera Android Full support 36Safari iOS Full support 10Samsung Internet Android Full support 5.0nodejs Full support 6.0.0

Legend

Full support  
Full support
No support  
No support

相关链接