Object.defineProperty()
a static method that defines a new property directly on an object, or modifies an existing property on an object, and returns the object.
객체가 기존에 가지고 있던 프로퍼티를 수정하거나, 새롭게 프로퍼티를 정의할 수 있음.
Syntax
Object.defineProperty(obj, prop, descriptor)
Parameters
obj : 프로퍼티 정의를 할 객체prop : String or Symbol 로 된 프로퍼티 키.descriptor : 프로퍼티의 상태(value, writable, enumerable, configurable)를 설명해주는 디스크립터 객체
const object1 = {};
Object.defineProperty(object1, 'property1', {
value: 42,
writable: false,
});
object1.property1 = 77;
// Throws an error in strict mode
console.log(object1.property1);
// Expected output: 42
objectDescriptor 객체
모든 것을 설정하지는 않아도 됨. 디폴트 값이 있기 때문. default ⬇️
- value : undefined
- get : undefined
- set : undefined
- writable(값 변경 가능 여부) : false(
Object.defineProperty를 사용하여 value를 설정할 때) - enumerable(열거 가능 여부) : false (
Object.defineProperty를 사용하여 value를 설정할 때) - configurable(재정의 가능 여부) : false(
Object.defineProperty를 사용하여 value를 설정할 때)
get, set
function MyClass() {}
let value;
Object.defineProperty(MyClass.prototype, "x", {
get() {
return value;
},
set(x) {
value = x;
},
});
const a = new MyClass();
const b = new MyClass();
a.x = 1;
console.log(b.x); // 1
'Frontend > JavaScript' 카테고리의 다른 글
| [JavaScript] e.preventDefault() 로 form 의 기본 동작 막기 (0) | 2024.01.22 |
|---|---|
| Proxy 프록시 (0) | 2023.12.29 |
| 32. 제너레이터와 async/await (0) | 2023.12.25 |
| 31. 프로미스 (1) | 2023.12.25 |
| 30. REST API (0) | 2023.12.25 |