수색…
소개
JavaScript의 프록시를 사용하여 객체의 기본 작업을 수정할 수 있습니다. 프록시는 ES6에서 도입되었습니다. 객체의 프록시 자체가 객체이며 트랩이 있습니다. 트랩은 프록시에서 작업이 수행 될 때 트리거 될 수 있습니다. 여기에는 속성 조회, 함수 호출, 속성 수정, 속성 추가 등이 포함됩니다. 적용 가능한 트랩이 정의되지 않으면 프록시가없는 것처럼 프록시가있는 객체에서 작업이 수행됩니다.
통사론
let proxied = new Proxy(target, handler);
매개 변수
매개 변수 | 세부 |
---|---|
목표 | 대상 객체,이 객체에 대한 작업 (가져 오기, 설정 등 ...)은 처리기를 통해 전달됩니다. |
매니저 | 대상 객체에서 작업을 가로 채기위한 "트랩"을 정의 할 수있는 객체 (가져 오기, 설정 등 ...) |
비고
사용 가능한 "트랩"의 전체 목록은 MDN - Proxy - "처리기 객체의 메소드" 에서 찾을 수 있습니다.
매우 간단한 프록시 (설정 함정 사용)
이 프록시는 대상 object
에 설정된 모든 문자열 속성에 문자열 " went through proxy"
를 추가하기 만합니다.
let object = {};
let handler = {
set(target, prop, value){ // Note that ES6 object syntax is used
if('string' === typeof value){
target[prop] = value + " went through proxy";
}
}
};
let proxied = new Proxy(object, handler);
proxied.example = "ExampleValue";
console.log(object);
// logs: { example: "ExampleValue went trough proxy" }
// you could also access the object via proxied.target
프록시 속성 조회
속성 조회에 영향을 주려면 get
처리기를 사용해야합니다.
이 예에서는 값뿐만 아니라 해당 값의 유형도 반환하도록 속성 조회를 수정합니다. 우리는 Reflect 를 사용하여 이것을 완화합니다.
let handler = {
get(target, property) {
if (!Reflect.has(target, property)) {
return {
value: undefined,
type: 'undefined'
};
}
let value = Reflect.get(target, property);
return {
value: value,
type: typeof value
};
}
};
let proxied = new Proxy({foo: 'bar'}, handler);
console.log(proxied.foo); // logs `Object {value: "bar", type: "string"}`
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow