Reflect.defineProperty()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

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 블록으로 잡아야 합니다. 반면 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

같이 보기