JavaScript 의 프 록 시 모드
5159 단어 JavaScript대리패턴
이것 은 아주 간단 한 스 크 립 트 입 니 다. 자바 스 크 립 트 에 프 록 시 클래스 를 만 들 수 있 습 니 다.예 를 들 어 우 리 는 구조 함수 (기능) 로 사 용 될 것 이다. 그 위 에 일부 기능 을 정의 했다. 예 를 들 어 더하기, 빼 기, 곱 하기, 나 누 기
이다. function Math() {this.IsMath = true;}Math.prototype = {add: function(a, b) {return a + b;},subtract: function(a, b) {return this.add(a, -b);},multiply: function(a, b) {return a * b;},divide: function(a, b) {return a / b;}}
우 리 는 어느 정도 에 그것 의 행 위 를 수정 할 수 있 기 를 바 랍 니 다. 우 리 는 모든 함수 가 이러한 종류의
beforeFunction
사건 과 afterFunction 이벤트 내 부 를 호출 하 는 것 을 차단 할 수 있 기 를 바 랍 니 다. 우 리 는 우리 가 원 하 는 이 두 가지 기능 을 결정 할 수 있다.이 유 니 버 설 프 록 시 스 크 립 트 를 사용 하면 모 카 오류 (Node. js) 를 비 웃 기 쉽 습 니 다.이 글 에서 저 는 간단 한 프 록 시 로그 인 기능 호출 을 정의 할 것 입 니 다. (이렇게 하면 node. js 에서 console. log 를 사용 하지만 브 라 우 저 코드 에서 쉽게 수정 할 수 있 습 니 다)
사용 코드
함수 이름
createProxyDefinition
은 당신 이 필요 로 하 는 것 입 니 다.이 기능 은 proxy. js 에서 본문 에 첨부 된 파일 을 정의 합 니 다. 다운로드 할 수 있 습 니 다.이 함 수 는 3 인자 beforeFunction
, afterFunction
를 사용 합 니 다.이
beforeFunction
afterFunction
는 상당 한 해석 이다.함수 가 대상 클래스 로 호출 될 때마다 이 두 사건 은 화 를 낸다. beforeFunction
두 개의 인 자 를 주 고 첫 번 째 는 호출 된 함수
이 며 두 번 째
는 함수 에 전달 되 는 배열 입 니 다.값 을 되 돌려 주면 이벤트 에서 기 존 기능 이 호출 되 거나 되 돌아 오지 않 습 니 다.afterFunction
세 개의 인 자 를 주 고 첫 번 째 는 호출 된 함수
이 며 두 번 째 는 원래 함수 의 반환 값 이 고 세 번 째 는 함수 에 전 달 된
배열 입 니 다.추가 대상
은 클래스 의 원형 을 확장 하여 들 어 옵 니 다.가장 좋 은 예 는 종 류 를 어떻게 사용 하 는 지 설명 하 는 것 이다.간단 한 프 록 시 정 의 를 만 들 고 싶 습 니 다. 매개 변 수 를 출력 하 는 것 만으로 함수 이름 이 라 고 부 릅 니 다. 추적 함수 호출 에 사용 할 수 있 습 니 다.또 다른 유용 한 예 가 있 습 니 다. 이것 은 제 가 이 글 을 쓰 고 싶 은 첫 번 째 이 유 는 node. js 의 프로젝트 를 덮어 쓸 때 참고 하 는 글 < to updated > 입 니 다.
프 록 시 정의 로그 파일 을 만 들 려 면 (node. js 모듈)
var beforeFunction = function(name, args) {if(!this.__levels) {this.__levels = 0;}for(var i = 0; i < this.__levels; i++) {process.stdout.write(“\t”);}console.log(” Entering: >> “, name, ” : “, args);this.__levels++;};var afterFunction = function(name, ret, args) {this.__levels–;for(var i = 0; i < this.__levels; i++) {process.stdout.write(“\t”);}console.log(” Exiting: >> “, name)}var createCallsLogger = createProxyDefinition(beforeFunction, afterFunction);
createCallsLogger
현 재 는 하나의 함수 로 모든 구조 와 수정 이 필요 합 니 다.이것 은 예시 로 사 용 될 것 이기 때문이다.
createCallsLogger(Math);var math = new Math();math.add(1, 2);math.subtract(10, 3);math.multiply(5, 5);math.divide(16, 4);
현재 모든 함수 호출 수학 은 콘 솔 에 기 록 됩 니 다. 출력 예 는 다음 과 같 습 니 다.
usr/bin/node index.jsEntering: >> add : { ’0′: 1, ’1′: 2 }Exiting: >> addEntering: >> subtract : { ’0′: 10, ’1′: 3 }Entering: >> add : { ’0′: 10, ’1′: -3 }Exiting: >> addExiting: >> subtractEntering: >> multiply : { ’0′: 5, ’1′: 5 }Exiting: >> multiplyEntering: >> divide : { ’0′: 16, ’1′: 4 }Exiting: >> divideProcess finished with exit code 0
엔진 아래
기능 createProxyDefinition 클래스 (구조 함수) 를 정의 해 야 합 니 다. 모든 프로 토 타 입 기능 에서 모든 기능 의 새로운 기능 을 대체 합 니 다. 호출 과 이벤트 의 대표 단 이 필요 합 니 다. 이 기능 에 첨부 된 파일 proxy.js 입 니 다. 대충 말 하면 위조 코드 입 니 다.
function __createProxy(constructor, proxyInstanceDefinition){if (proxy already added)return;for each function in constructor.prototype{var newName = __ + functionname;copy original function reference to a new function with name “NewName”create a new function to replace the current. the new function will call original function)}}
마지막.
이러한 대리 의 생 성 방법 은 코드 를 생산 하 는 데 사용 되 지 않 으 며, 이상 적 인 상황 에서, 그것 은 신속하게 비 웃 거나 다른 종류 에 진출 하 는 데 사용 된다 node.js.모든 오 류 를 덮어 씁 니 다. 생산 코드 를 사용 하 는 것 을 권장 하지 않 는 이 유 는 기본적으로 모든 함수 에 새로운 함수 인 스 턴 스 를 만 드 는 것 이 덮어 쓰기 때 문 입 니 다. 이상 적 으로 생산 환경 에서 이런 일 을 하 는 것 은 사용자 정의 코드 가 있어 야 합 니 다. 원 하 는 것 이 있 으 면 추가 비용 의 재 설정 과 메모리 사용 상황 이 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.