Reflect.defineProperty()

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

시도해보기

구문

js
Reflect.defineProperty(target, propertyKey, attributes);

매개변수

target

속성을 정의할 대상 객체.

propertyKey

정의하거나 수정할 속성의 이름.

attributes

정의하거나 수정하는 속성을 기술하는 객체.

반환 값

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

예외

targetObject가 아니면 TypeError.

설명

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

예제

Reflect.defineProperty() 사용하기

js
var obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
obj.x; // 7

속성 정의의 성공 여부 알아내기

Object.defineProperty는 성공 시 객체를 반환하고, 실패 시 TypeError를 던지므로 속성 정의 과정에 발생할 수 있는 오류를 try...catch (en-US) 블록으로 잡아야 합니다. 반면 Reflect.defineProperty는 성공 여부를 나타내는 Boolean을 반환하므로, 간단하게 if...else 블록만 사용하면 됩니다.

js
if (Reflect.defineProperty(target, property, attributes)) {
  // 성공
} else {
  // 실패
}

명세

Specification
ECMAScript Language Specification
# sec-reflect.defineproperty

브라우저 호환성

BCD tables only load in the browser

같이 보기