03 에이전트, 교체기
5688 단어 교체기
프록시 모드
개체 중심 설계 원칙 - 단일 책임 원칙
대리와 본체 핑계의 일치성
보호 에이전트
가상 에이전트
var myImage = (function() {
var imgNode = document.createElement('img');
document.body.appendChild(imgNode);
return function(src) {
imgNode.src = src;
};
})();
var proxyImage = (function() {
var img = new Image;
img.onload = function() {
myImage(this.src);
};
return function(src) {
myImage('picture/loading.jpg');
img.src = src;
}
})();
proxyImage('http://tp3.sinaimg.cn/1805666510/180/5718258464/1');
var synchronousFile = function (id) {
console.log(' ' + id);
};
var proxySynchronousFile = (function() {
var cache = [], timer;
return function(id) {
cache.push(id);
if(timer)
return;
timer = setTimeout(function() {
synchronousFile(cache.join(','));
clearTimeout(timer);
timer = null;
cache.length = 0;
}, 2000); //2
};
})();
var checkbox = document.getElementsByTagName('input');
for(var i = 0, c; c = checkbox[i++];) {
c.onclick = function() {
if(this.checked === true)
proxySynchronousFile(this.id);
}
};
타성 로드에서의 응용
var miniConsole = (function(){
var cache = [];
var handler = function( ev ){
if ( ev.keyCode === 13 ){ //enter
var script = document.createElement( 'script' );
script.onload = function(){
for ( var i = 0, fn; fn = cache[ i++ ]; ){
fn();
}
};
script.src = 'log.js';
document.getElementsByTagName( 'head' )[0].appendChild(script);
document.body.removeEventListener( 'keydown', handler );
}
};
document.body.addEventListener( 'keydown', handler, false );
return {
log: function(){
var args = arguments;
cache.push( function(){
return miniConsole.log.apply( miniConsole, args ); // , log.js ;
});
}
}
})();
miniConsole.log(0);
miniConsole.log(1);
// enter
// log.js
miniConsole = {
log: function(){
//
console.log( Array.prototype.join.call( arguments ) );
}
};
캐시 에이전트
var mult = function () {
var a = 1;
for(var i = 0, len = arguments.length; i < len; i++)
a = a * arguments[i];
return a;
};
var proxyMult = (function() {
var cache = {};
return function() {
var args = [].join.call(arguments, ',');
if(args in cache)
return cache[args]
return cache[args] = mult.apply(this, arguments);
};
})();
proxyMult(3,6,8);
고급 함수를 이용하여 동적 프록시 만들기
proxyMult
를 수정하면 앞으로 유사한 계산의 캐시 에이전트가 같은 함수로 생성됩니다var createProxyFactory = function(fn) {
var cache = {};
return function() {
var args = [].join.call(arguments, ',');
if(args in cache)
return cache[args];
return cache[args] = fn.apply(this, arguments);
}
};
var proxyMult = createProxyFactory(mult);
기타 에이전트
반복자 모드
Array.prototype.forEach
내부 교체기
var each = function (arr, callback) {
for(var i = 0, len = arr.length; i < len; i++)
callback.call(arr, i, arr[i]); //
};
each([1,2,3], function(index, value) {
console.log(this,index,value);
});
외부 교체기
var Iterator = function(obj) {
var current = 0, len = obj.length;
var next = function() {
current++;
}
var isDone = function() {
return current >= len; // length
}
var getCurrentIten = function() {
return obj[current];
}
return {
next: next,
isDone: isDone,
getCurrentIten: getCurrentIten
}
};
//
var compare = function(iterator1, iterator2) {
while(!iterator1.isDone() || !iterator2.isDone()) {
if(iterator1.getCurrentIten() !== iterator2.getCurrentIten())
throw new Error(' ');
iterator1.next();
iterator2.next();
}
console.log(' ');
};
compare(Iterator([0,1,2]), Iterator([0,1,2]));
반복 클래스 그룹과 글꼴 크기 대상
length
속성을 가지고 하표로 접근할 수 있으면 교체될 수 있다응용 예
try-catch,if-else
등 실제 상황에 따라 서로 다른 집행 함수를 시도한다.false
.var iterator = function() {
for(var i = 0, fn; fn = arguments[i++];) {
var result = fn();
if(result !== false)
return result;
}
};
iterator(fn1, fn2, fn3, fn4);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
루비 교체기 지식 총집합간단하게 말하자면 교체(iterate)는 같은 일을 반복하는 것을 가리키기 때문에 교체기(iterator)는 같은 일을 여러 번 반복하는 데 쓰인다. 교체기는 집합 지원 방법이다.데이터 구성원 그룹을 저장하는 객체를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.