본문 바로가기
Frontend/JavaScript

Object.defineProperty()

by yerin.dev 2023. 12. 29.

출처 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#inheritance_of_properties

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