ES6 프록시의 set, get, has, deleteProperty 트랩
(proxy) , javascript 。
에이전트가 해결할 문제를 이해하려면 다음 절차를 따르십시오.
let colors = ["red", "blue", "green"];
console.log(colors.length);// 3
console.log(colors[0]);// red
console.log(colors[1]);//blue
colors[3] = "black";
console.log(colors.length); //4
colors.length = 2;
console.log(colors.length);// 2
console.log(colors[2]);// undefined
console.log(colors[1]);// blue
ES5 이전에 개발자는 수조를 모방할 수 있는 대상을 정의할 수 없었다. 이것들은 모두 js 엔진이 하고 있는 것이다.하지만 이제 ES6의 에이전트를 통해 충분히 할 수 있다는 것이 에이전트의 존재의 의미다.
간단한 프록시 만들기
Proxy 구조 함수에는
다음 코드에서 에이전트를 정의합니다
let target = {};
let proxy = new Proxy(target, {});
proxy.name = "proxy";
console.log(proxy.name);// "proxy"
console.log(target.name);// "proxy"
target.name = "target";
console.log(proxy.name);// "target"
console.log(target.name);// "target"
상술한 코드는 함정 함수를 넣지 않고 간단한 프록시 전송일 뿐이다.
다음은 흔히 볼 수 있는 에이전트 함정 몇 개를 보겠습니다.
set 트랩 유효성 검사 속성
set 트랩에는
//
let target = {
name: "target"
};
// , set
let proxy = new Proxy(target, {
// set
set( trapTarget, key, value, receiver) {
if(!trapTarget.hasOwnProperty(key)){
if(isNan(value)){
throw new TypeError(" ");
}
}
return Reflect.set(trapTarget, key, value, receiver);
}
});
proxy.count = 1;
console.log(proxy.count); //1
console.log(target.count);// 1
proxy.name = "Proxy";
console.log(proxy.name); // "Proxy"
console.log(target..name);// "Proxy"
// , ,
proxy.anotherName = "proxy";
get 트랩 검증 대상 구조
js는 존재하지 않는 속성을 읽을 때 오류가 발생하지 않고 undefined로 되돌아오는 의문점이 있습니다.
현재 get 함정 함수를 통해 js 엔진의 행동을 고쳐 프로그램이 존재하지 않는 속성을 읽을 수 있도록 합니다.
get 트랩은 세 개의 매개 변수를 수락합니다:
let proxy = new Proxy({},{
get (trapTarget,key,receiver){
if(!(key in receiver)){
throw new TypeError(" "+key+" ");
}
return Reflect.get(trapTarget,key,receiver);
}
})
proxy.name = "proxy";
console.log(proxy.name); //"proxy"
console.log(proxy.nme);//
여기에 target 대상이 없습니다.receiver 에이전트에has 함정이 함유되어 있는 것을 방지하기 위해서
has 함정을 사용하여 기존 속성 숨기기
has 트랩에는
let target = {
name: "target",
value: 42,
};
let proxy = new Proxy(target, {
has(trapTarget, key){
if(key === "value"){
return false;
}else{
return Reflect.has(trapTarget, key);
}
}
});
console.log("value" in proxy);// false
console.log("name" in proxy);// true
console.log("toString" in proxy);//true
deleteProperty 트랩을 사용하여 속성 삭제 방지
delete 작업을 사용할 때마다 deleteProperty 트랩이 호출되므로
let target = {
name: "target";
age: 42
}
let proxy = new Proxy(trapTarget, {
deleteProperty(trapTarget, key){
if(key === "value"){
return false;
}else{
return Reflect.deleteProperty(trapTarget, key);
}
}
});
// proxy.value
console.log("value" in proxy); //true;
let result1 = delete proxy.value;
console.log( result1);//false;
console.log("value" in proxy); //true;
// proxy.name
console.log("name" in proxy); //true;
let result2 = delete proxy.name;
console.log( result2);//true;
console.log("name" in proxy); //false;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
당신을 더 나은 프로그래머로 만들어 줄 수 있는 8가지 자바스크립트 트릭자바스크립트 코드를 최적화하는 방법에는 여러가지가 있습니다. 기사에선 작업시 자주 사용하는 8가지 javascript tricks을 요약해서 알려드립니다. 이런 방식은 고전적인 최적화 방식이고 우리는 'MAP'을 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.