Search

javascript - property

subtitle
Tags
자바스크립트
Created
2025/06/02
2 more properties

property attribute

내부 슬롯과 내부 메서드

내부 슬롯과 내부 메서드는 자바스크립트 엔진의 내부 로직이므로 원칙적으로 자바스크립트는 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지 않는다.
하지만, [[Prototype]] 내부 슬롯의 경우, __proto__ 를 통해 간접적으로 접근할 수 있다.

property descryptor

자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 상태란 프로퍼티의 값(value), 값 변경 가능 여부(writable), 열거 가능 여부(enumerable), 재정의 가능 여부(configurable)를 말한다.

프로퍼티 정의

Object.defineProperty 메서드를 사용하면 프로퍼티의 어트리뷰트를 정의할 수 있다. 인자로 객체의 참조와 데이터 프로퍼티의 키인 문자열, 프로퍼티 디스크립터 객체를 전달한다.
const person = {} Object.defineProperty(person, 'firstName', { value: 'Hyunji', writable: true, enumerable: true, configurable: true }) // { "value": "Hyunji", "writable": true, "enumerable": true, "configurable": true } Object.getOwnPropertyDescriptor(person, 'firstName')
JavaScript
복사
Object.defineProperties 메서드를 사용하면 여러 프로퍼티를 한 번에 정의할 수 있다.

객체 변경 방지

객체 확장 금지

Object.preventExtensions 메서드는 객체의 확장을 금지한다. 확장이 금지된 객체는 프로퍼티 추가가 금지된다. 확장 가능 여부는 Object.isExtensible 메서드로 확인 가능하다.

객체 밀봉

Object.seal. 객체 밀봉이란 프로퍼티 추가 및 삭제와 프로퍼티 어트리뷰트 재정의 금지를 의미한다. 즉, 밀봉된 객체는 읽기와 쓰기만 가능하다. 밀봉된 객체인지 여부는 Object.isSealed 메서드로 확인 가능하다.

객체 동결

Object.freeze로 동결된 객체는 읽기만 가능하다. 동결된 객체인지 여부는 Object.isFrozen 메서드로 확인할 수 있다.

불변 객체

지금까지 본 변경 방지 메서드들은 얕은 변경 방지이므로 중첩 객체까지는 영향을 주지 못한다. 따라서 Object.freeze로 객체를 동결해도 중첩 객체까지는 동결할 수 없다.

생성자 함수

new 연산자와 함께 생성자 함수로서 호출되면 함수 내부의 new.target은 함수 자신을 가리킨다. new 연산자 없이 일반 함수로서 호출된 함수 내부의 new.targetundefined이다.
function Circle(radius) { if (!new.target) { return new Circle(radius) } }
JavaScript
복사
하지만 new.target은 ES6에서 도입된 최신 문법으로 IE에서는 지원하지 않는다. new.target을 사용할 수 없는 경우 스코프 세이프 생성자 패턴을 사용할 수 있다. 모든 브라우저에서 full support가 되니, 만약 이런 코드를 오픈소스에서 발견한다면 IE를 대응하기 위해 이렇게 짜여져있다는 걸 유추할 수 있다.
function Circle(radius) { if (!(this instanceof Circle)) { return new Circle(radius) } }
JavaScript
복사