Reflect.defineProperty()

Reflect.defineProperty() 정적 메서드는 Object.defineProperty()와 같은 동작을 하지만 Boolean을 반환합니다.

구문

Reflect.defineProperty(target, propertyKey, attributes)

매개변수

target
속성을 정의할 대상 객체.
propertyKey
정의하거나 수정할 속성의 이름.
attributes
정의하거나 수정하는 속성을 기술하는 객체.

반환 값

속성이 성공적으로 정의됐는지 나타내는 Boolean.

예외

targetObject가 아니면 TypeError.

설명

Reflect.defineProperty 메서드는 객체에 속성을 정교하게 추가하거나 수정할 수 있습니다. 자세한 내용은 유사한 메서드인 Object.defineProperty를 참고하세요. Object.defineProperty는 성공 시 대상 객체를 반환하고 실패하면 TypeError를 던지지만, Reflect.defineProperty는 성공 여부를 나타내는 Boolean을 반환합니다.

예제

Reflect.defineProperty() 사용하기

var 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 Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Reflect.defineProperty' in that specification.
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Reflect.defineProperty' in that specification.
Draft  

브라우저 호환성

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

같이 보기