[javascript] 기본 프로퍼티 디스크립터와 defineProperty() 메소드의 차이점
자바스크립트에서 객체의 속성을 정의할 때, 기본적인 방법은 객체 리터럴을 사용하여 속성을 정의하거나, 객체의 프로토타입에 속성을 추가하는 것입니다. 하지만 때로는 더 세밀한 제어를 위해 프로퍼티 디스크립터와 defineProperty()
메소드를 사용해야 합니다.
기본 프로퍼티 디스크립터
객체의 속성을 정의할 때, 기본 프로퍼티 디스크립터를 사용할 수 있습니다. 이 디스크립터는 다음과 같은 속성을 가지고 있습니다.
value
: 속성의 값writable
: 속성의 값이 변경 가능한지 여부enumerable
: 속성이 열거 가능한지 여부configurable
: 속성이 변경 가능한지 여부
const obj = {
prop: 'value'
};
Object.defineProperty(obj, 'prop', {
value: 'new value',
writable: false,
enumerable: true,
configurable: false
});
이 방식을 사용하면 기존 속성을 업데이트하거나 변경할 수 있습니다. 하지만 객체의 여러 속성에 대해 반복적으로 설정해야 하기 때문에 번거로울 수 있습니다.
defineProperty()
메소드
defineProperty()
메소드를 사용하면 객체에 새로운 속성을 추가하거나 기존 속성을 업데이트할 수 있습니다. 이 메소드는 다음과 같은 매개변수를 가집니다.
obj
: 속성을 추가하거나 업데이트할 객체prop
: 속성의 이름descriptor
: 속성의 디스크립터 객체
const obj = {};
Object.defineProperty(obj, 'prop', {
value: 'value',
writable: true,
enumerable: true,
configurable: true
});
defineProperty()
메소드는 기본 프로퍼티 디스크립터와 동일한 속성을 사용하며, 객체에 새로운 속성을 추가하는 데 편리합니다.
결론
기본 프로퍼티 디스크립터와 defineProperty()
메소드는 객체의 속성을 정의하고 업데이트하는 데 사용됩니다. 기본 프로퍼티 디스크립터는 객체 리터럴이나 프로토타입에 직접 속성을 정의할 때 사용되며, defineProperty()
메소드는 객체에 새로운 속성을 추가하거나 기존 속성을 업데이트할 때 사용됩니다.