일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Git
- HTML
- 장고
- form
- react
- Baekjoon
- 알고리즘 연습
- 파이썬 알고리즘
- 백준
- API
- web
- MAC
- PYTHON
- DRF
- Django
- 알고리즘
- java
- javascript
- 알고리즘 문제
- Algorithm
- 알고리즘 풀이
- CSS
- django ORM
- es6
- js
- django rest framework
- 파이썬
- django widget
- c++
- AWS
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[ES6] proxy 본문
Proxy
Proxy
객체는 기본적인 동작(속성 접근, 할당, 순회, 열거, 함수 호출 등)의 새로운 행동을 정의할 때 사용합니다.
proxy
는 target
과 handler
두 개의 인자를 받습니다.
target
으로는 새로운 행동을 정의하고 싶은 object 를, handler
에서는 target
의 행동을 정의합니다.
const user = {
name: "minsung",
age: 24,
school: "UOS"
}
const userFilter = {};
const filteredUser = new Proxy(user, userFilter);
proxy
객체 filteredUser
는 target
의 필드를 참조가능합니다. 이 뿐만 아니라 target
과 동일하게 사용이 가능합니다.
console.log(filteredUser.name);
// minsung
handler
에는 trap
을 정의해봅시다.
trap
은 target
값에 접근할 수 있는 메소드를 말하며 이미 정해져있습니다.
예 들어 filteredUser
통해서 target
에 접근할 때는 userFilter
필터의 get
trap
을 거치게 됩니다.
이를 다음과 같이 커스튬하게 되면 그에 따라 값이 결정됩니다.
const userFilter = {
get: () => {
console.log("get 호출");
return "get";
}
};
const filteredUser = new Proxy(user, userFilter);
console.log(filteredUser.name);
// get 호출
// get
사용자의 나이는 비공개하도록 get
을 커스튬해봅시다.
- target :
proxy
의 첫 번째 인자로 받은 object - prop : 원하는 필드값
- receiver :
proxy
객체
const userFilter = {
get: (target, prop, receiver) => {
return prop === "age" ? "나이는 비공개입니다." : target[prop];
}
};
const filteredUser = new Proxy(user, userFilter);
console.log(filteredUser.name);
console.log(filteredUser.age);
// minsung
// 나이는 비공개입니다.
이 외의 여러 trap 에 대해서는 아래의 링크에서 자세히 확인할 수 있습니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Proxy
'웹프로그래밍 > ES6' 카테고리의 다른 글
[ES6] Symbol (0) | 2020.01.05 |
---|---|
[ES6] generator (0) | 2020.01.05 |
[ES6] Class의 상속, super, this (0) | 2020.01.04 |
[ES6] Async and Await (0) | 2020.01.03 |
[ES6] Promises - then, catch, all, race, finally (1) | 2020.01.03 |
Comments