Extjs4 원본 - Ext.Function 해석
Ext.Function = {
flexSetter: function(fn) {
return function(a, b) {
var k, i;
if (a === null) {
return this;
}
if (typeof a !== 'string') {
for (k in a) {
if (a.hasOwnProperty(k)) {
fn.call(this, k, a[k]);
}
}
if (Ext.enumerables) {
for (i = Ext.enumerables.length; i--;) {
k = Ext.enumerables[i];
if (a.hasOwnProperty(k)) {
fn.call(this, k, a[k]);
}
}
}
} else {
fn.call(this, a, b);
}
return this;
};
},
bind: function(fn, scope, args, appendArgs) {
var method = fn,
applyArgs;
return function() {
var callArgs = args || arguments;
if (appendArgs === true) {
callArgs = Array.prototype.slice.call(arguments, 0);
callArgs = callArgs.concat(args);
}
else if (Ext.isNumber(appendArgs)) {
callArgs = Array.prototype.slice.call(arguments, 0);
applyArgs = [appendArgs, 0].concat(args);
Array.prototype.splice.apply(callArgs, applyArgs);
}
return method.apply(scope || window, callArgs);
};
},
pass: function(fn, args, scope) {
if (args) {
args = Ext.Array.from(args);
}
return function() {
return fn.apply(scope, args.concat(Ext.Array.toArray(arguments)));
};
},
alias: function(object, methodName) {
return function() {
return object[methodName].apply(object, arguments);
};
},
createInterceptor: function(origFn, newFn, scope, returnValue) {
var method = origFn;
if (!Ext.isFunction(newFn)) {
return origFn;
}
else {
return function() {
var me = this,
args = arguments;
newFn.target = me;
newFn.method = origFn;
return (newFn.apply(scope || me || window, args) !== false) ? origFn.apply(me || window, args) : returnValue || null;
};
}
},
createDelayed: function(fn, delay, scope, args, appendArgs) {
if (scope || args) {
fn = Ext.Function.bind(fn, scope, args, appendArgs);
}
return function() {
var me = this;
setTimeout(function() {
fn.apply(me, arguments);
}, delay);
};
},
defer: function(fn, millis, obj, args, appendArgs) {
fn = Ext.Function.bind(fn, obj, args, appendArgs);
if (millis > 0) {
return setTimeout(fn, millis);
}
fn();
return 0;
},
createSequence: function(origFn, newFn, scope) {
if (!Ext.isFunction(newFn)) {
return origFn;
}
else {
return function() {
var retval = origFn.apply(this || window, arguments);
newFn.apply(scope || this || window, arguments);
return retval;
};
}
},
createBuffered: function(fn, buffer, scope, args) {
return function(){
var timerId;
return function() {
var me = this;
if (timerId) {
clearInterval(timerId);
timerId = null;
}
timerId = setTimeout(function(){
fn.apply(scope || me, args || arguments);
}, buffer);
};
}();
},
createThrottled: function(fn, interval, scope) {
var lastCallTime, elapsed, lastArgs, timer, execute = function() {
fn.apply(scope || this, lastArgs);
lastCallTime = new Date().getTime();
};
return function() {
elapsed = new Date().getTime() - lastCallTime;
lastArgs = arguments;
clearTimeout(timer);
if (!lastCallTime || (elapsed >= interval)) {
execute();
} else {
timer = setTimeout(execute, interval - elapsed);
}
};
}
};
Ext.defer = Ext.Function.alias(Ext.Function, 'defer');
Ext.pass = Ext.Function.alias(Ext.Function, 'pass');
Ext.bind = Ext.Function.alias(Ext.Function, 'bind');
1.alias(object,methodName): 지정한 대상에 object의 mothodName 방법을 부여합니다.
2.bind(fn,scope,args,appendargs): fn 함수를 scope로 상하문으로args를 매개 변수로 호출합니다.
자바스크립트에서 함수는 다른 값과 마찬가지로 데이터이기 때문에 함수에서 되돌아와 대상 속성에 부여되고 수조에 저장될 수 있다.
다음 예를 고려하면, 그 중에는 하나의 함수가 포함되어 있으며, 그는 끼워 넣은 함수를 되돌려준다.이 함수를 호출할 때마다 함수를 되돌려줍니다.되돌아오는 함수의 자바스크립트 코드는 항상 같지만, 외곽 함수의 매개 변수 값이 호출할 때마다 다르기 때문에, 외곽 함수의 호출할 때마다 다른 호출 대상이 있기 때문에 생성된 역할 영역은 약간 다르다.되돌아오는 함수를 한 그룹에 저장한 다음 그 함수를 호출하면 매번 다른 값을 되돌려줍니다.모든 함수는 같은 자바스크립트 코드를 포함하고 모든 단락의 코드는 같은 작용역에서 호출된다. 그러면 유일하게 서로 다른 반환값을 초래할 수 있는 요소는 함수 정의가 있는 작용역이다.
function makefunc(x) {
return function() {return x;}
}
var a = [makefunc(0), makefunc(1), makefunc(2)];
alert(a[0]());
alert(a[1]());
alert(a[2]());
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ExtJS 3.2 학습 노트(3) 사용자 정의 이벤트Extjs에서 모든 상속은 Ext.util에서 합니다.Observable 클래스의 컨트롤은 이벤트를 지원할 수 있습니다. 클래스에 대해 이벤트를 사용자 정의하려면 다음 절차를 따르십시오. 1, 먼저 클래스를 정의합니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.