JavaScript 프 록 시 모드 원리 와 용법 인 스 턴 스 상세 설명
5350 단어 JavaScript에이전트 모드
프 록 시 모드 의 정의,프 록 시 는 대상(proxy)으로 대상 의 접근 을 제어 합 니 다.이 를 위해 그 가 먼저 목표 대상 과 같은 인 터 페 이 스 를 사용 하지만 그 는 장식 자 모델 과 달리 목표 대상 에 대해 어떠한 수정 도 하지 않 는 다.그 목적 은'복잡 한'대상 의 초기 화 시간 을 늦 추 는 데 있다.이렇게 하면 이 목표 대상 을 사용 할 때 그 를 초기 화 할 수 있다.
프 록 시 모드 는 두 가지 분류 가 있 습 니 다.
(1)일반 에이전트
(2)타성 에이전트
구체 적 으로 아래 의 예 를 보다
첫째,일반 에이전트 모드
단계 1,인터페이스 검사 파일 참조
//
// Interface.prototype ,
//
//
var Interface=function (name,methods) {//name:
if(arguments.length<2){
alert(" ")
}
this.name=name;
this.methods=[];//
for(var i=0;i<methods.length;i++){
if(typeof methods[i]!="string"){
alert(" ");
}else {
this.methods.push( methods[i]);
}
}
};
Interface.ensureImplement=function (object) {
if(arguments.length<2){
throw new Error(" 2 ")
return false;
}
for(var i=1;i<arguments.length;i++){
var inter=arguments[i];
// Interface
if(inter.constructor!=Interface){
throw new Error(" , Interface ");
}
//
//
for(var j=0;j<inter.methods.length;j++){
var method=inter.methods[j];//
//object[method]
//
if(!object[method]||typeof object[method]!="function" ){//
throw new Error(" ")
}
}
}
}
단계 2,목표 클래스(1)도서 류
//
/*
* bid id
* bName
* bPrice
* */
var Book = function(bid,bName,bPrice){
this.bid = bid;
this.bName = bName;
this.bPrice = bPrice;
}
(2)진정한 목표 류
//
var myBookShop=(function () {
//
var books={};
return function (bks) {
//
if(typeof bks=="object"){
books=bks;
}
//
this.addBook = function(book){
books[book.bid] = book;
}
//
this.findBook=function (bid) {
if(books[bid]){
return books[bid];
}else {
return null;
}
}
//
this.returnBook=function (book) {
this.addBook(book);
}
//
this.lendBook=function (bid) {
var book=this.findBook(bid);
return book;
}
}
})();
단계 3,일반 대리
var myBookShopProxy=function (bks) {
var obj=new myBookShop(bks);//
//
this.addBook=function (book) {
obj.addBook(book);
}
//
this.findBook = function(bid){
return obj.findBook(bid);
}
//
this.returnBook=function (book) {
obj.returnBook(book);
}
//
this.lendBook=function (bid) {
return obj.lendBook(bid);
}
}
단계 4,데이터 추가 후 접근 시작
var proxy = new myBookShopProxy({
"001":new Book("001","EXTJS","45"),
"002":new Book("002","JS","60")
})
alert(proxy.lendBook("001").bName)
일반적인 프 록 시 모드 에서 우 리 는 프 록 시 에서 목표 대상 에 대한 인용 이 한꺼번에 초기 화 된 다음 에 이 를 바탕 으로 다른 조작 을 실현 한 다 는 것 을 알 수 있다.그림:목표 클래스 와 에이전트 가 같은 인 터 페 이 스 를 동시에 실현 했다.프 록 시 에서 목표 클래스 를 한꺼번에 인 스 턴 스 한 다음 에 목표 클래스 에 접근 하 는 방법 입 니 다.
결론 적 으로 이 대 리 는 우리 가 정 의 를 엄 격 히 설치 하여 쓴 것 으로 일반 개발 에 사용 되 지 않 으 므 로 그 에 게 아무런 의미 가 없어 야 한다.
두 번 째,타성 에이전트-사용 할 때 만 목표 클래스 를 초기 화하 고 인용 합 니 다.
프 록 시 부분 에 대한 수정 은 다음 과 같 고 나머지 부분 은 같 으 며 코드 는 다음 과 같다.
// ---
var myBookShopProxy=function (bks) {
var obj=null;
this._init=function () {
obj=new myBookShop(bks);
}
//
this.addBook=function (book) {
this._init();
obj.addBook(book);
}
//
this.findBook=function (bid) {
this._init();
obj.findBook(bid);
}
//
this.returnBook=function (book) {
this._init();
obj.returnBook(book);
}
//
this.lendBook=function (bid) {
this._init();
return obj.lendBook(bid);
}
}
수 정 된 에이전트 실행 과정,그림 참조관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 전단 코드 디 버 깅 실행 도 구 를 사용 할 수 있 습 니 다.
더 많은 자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.