πŸ“š Reference


πŸ“œ Chapter


Reflect

β€£

Vue.js

Vue 3

Proxy


μ‚¬μš©λ²•


μ˜ˆμ‹œ


const user = {
  name: "Jane Doe",
  age: 30
};

const handler = {
  // 'get' 트랩: 속성 읽기 μž‘μ—… κ°€λ‘œμ±„κΈ°
  get: function(target, prop, receiver) {
    console.log(`Getting property: ${prop}`);
    return target[prop];
  },

  // 'set' 트랩: 속성 ν• λ‹Ή μž‘μ—… κ°€λ‘œμ±„κΈ°
  set: function(target, prop, value) {
    if (prop === 'age' && typeof value !== 'number') {
      throw new TypeError("Age must be a number!");
    }
    console.log(`Setting property: ${prop} to ${value}`);
    target[prop] = value;
    return true; // μ„±κ³΅μ μœΌλ‘œ ν• λ‹Ήν–ˆμŒμ„ λ‚˜νƒ€λƒ„
  }
};

const userProxy = new Proxy(user, handler);

console.log(userProxy.name); // "Getting property: name" 좜λ ₯ ν›„ "Jane Doe" λ°˜ν™˜
userProxy.age = 31; // "Setting property: age to 31" 좜λ ₯
// userProxy.age = "thirty-two"; // TypeError λ°œμƒ