JavaScript에서 프록시 패턴의 원칙은 객체에 대한 프록시를 제공하여 객체에 대한 액세스를 제어하기 위해 객체에 대한 대체 또는 점유자를 제공하는 것이며, 프록시 객체는 원본 객체에 대한 참조를 제어합니다. 객체 구조 패턴입니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
프록시는 대상 개체에 대한 액세스를 제어하는 데 사용되는 개체(프록시)입니다. 이를 위해서는 먼저 대상 객체와 동일한 인터페이스를 가져야 하지만, 대상 객체를 수정하지 않는다는 점에서 데코레이터 패턴과 다릅니다. 그 목적은 "복잡한" 객체의 초기화 시간을 지연시키는 것입니다. . 이 방법을 사용하면 대상 개체를 사용할 때 초기화할 수 있습니다(특히 싱글톤의 경우 중요함).
객체에 대한 대체 또는 자리 표시자를 제공하여 접근을 제어합니다.
객체에 대한 프록시를 제공하고 프록시 객체는 원본 객체에 대한 참조를 제어합니다. 프록시 패턴은 객체 구조 패턴입니다.
프록시 패턴에는 두 가지 범주가 있습니다.
(1) 일반 프록시
(2) 게으른 프록시
코드를 살펴보세요.
function getSomething(value) { if (value > 10) { return value * 2; } }
여기서 함수를 정의합니다. 전달된 값이 10보다 크면 해당 값의 2배를 반환합니다. 음. . . 꽤 괜찮지만 단점도 있습니다. 함수가 너무 많은 일을 합니다. 우리의 목적은 매개변수 값의 두 배를 얻는 것입니다. 여기서는 조건부 판단을 내립니다. (물론 여기서는 아무런 영향을 미치지 않습니다. 단지 간단한 예를 제시한 것뿐입니다.) 우리가 원하는 함수는 단지 값을 반환하는 것입니다.
코드 보기:
function getSomething(value) { return value * 2; } function proxtGet(value) { if (value <10) return; return getSomething(value); }
이제 getSomething의 기능을 분리하고 이를 수행하기 위해 ProxyGet을 사용한다고 판단한 다음 getSomething이 안전하게 자체 작업을 수행할 수 있습니다.
사실은 일종의 보호 프록시인데, 대상 객체를 보호하기 위해 ProxyGet 메소드를 제공하고 있는데, 조건을 만족하는 사람만이 작동할 수 있습니다.
언젠가 판단할 필요가 없다면 getSomething을 직접 호출하여 결과를 확인할 수 있어 매우 편리합니다.
다음은 가상 에이전트에 대한 소개입니다.
웹 개발에서 가장 비용이 많이 드는 것은 의심할 바 없이 네트워크 요청입니다. 목록을 클릭하면 배경 파일 정보를 나타내는 목록이 있다고 가정해 보겠습니다. 파일을 백그라운드로 패키징하도록 요청합니다. Kirin Arm을 사용하는 사용자에게 이러한 네트워크 오버헤드는 악몽입니다(이 작업의 실시간 요구 사항이 그리 높지 않다고 가정). 그러면 우리는 이렇게 작동하여 오버헤드:
function sendFile(files) { // 做一些操作,然后发送文件信息给后台 console.log('发送成功'); } var proxySendFile = (function () { var caches = []; var timer = null; return function (file) { caches.push(file); if (timer) { return }; timer = setTimeout(function () { sendFile(caches); clearInterval(timer); timer = null; caches.length = 0; }, 2000) } } )()
여기서 sendFile은 파일 전송 작업입니다. 우리는 파일 전송 작업을 프록시하기 위해 ProxySendFIle을 사용합니다. 2000은 요청을 하나만 시작하는 것이 가능하다고 생각하시나요? 당신의 Qilin Arm이 막을 수 없다 하더라도 당신과 여기 있는 다른 사람들 사이에는 아무런 차이가 없습니다.
관련 권장 사항: javascript 학습 튜토리얼
위 내용은 JavaScript 프록시 모드의 원리는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!