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.모든 오 류 를 덮어 씁 니 다. 생산 코드 를 사용 하 는 것 을 권장 하지 않 는 이 유 는 기본적으로 모든 함수 에 새로운 함수 인 스 턴 스 를 만 드 는 것 이 덮어 쓰기 때 문 입 니 다. 이상 적 으로 생산 환경 에서 이런 일 을 하 는 것 은 사용자 정의 코드 가 있어 야 합 니 다. 원 하 는 것 이 있 으 면 추가 비용 의 재 설정 과 메모리 사용 상황 이 없습니다.

좋은 웹페이지 즐겨찾기