‘apply’

Throttling function calls銆愯瘧鏂囥

鏄熸湡涓, 7鏈 21st, 2010

鍦╰witter涓婄湅鍒颁竴绡囨瘮杈冨ソ鐨勬帹鑽愭枃绔狅紝鑷冲皯鎴戞劅瑙夊張瀛﹀埌浜嗕笢瑗匡紝鐗瑰埆鎷垮嚭鏉ョ炕璇戝拰鍒嗕韩涓涓嬨

鍘熸枃鍦板潃锛http://javascript.feederss.com/post/2442.html

濡傛灉浣犲仛杩囩敤鎴锋枃鏈鎻愪氦纭鐨勫姛鑳斤紝姣斿鐢ㄥ埌浜唎nkeypress锛岄偅涔堜綘鏄惁鎯宠繃瑕佸噺灏戜綘鐨勬娴嬪嚱鏁扮殑鎵ц娆℃暟锛熶妇涓渶绠鍗曠殑渚嬪瓙锛屾瘮濡備綘瑕佺‘璁や竴涓敤鎴峰悕鏄惁瀛樺湪锛岄偅涔堜綘鍙兘骞朵笉鎯虫瘡娆eypress閮芥墽琛宎jax寮傛妫娴嬶紝鍥犱负澶у鏁扮殑鏃跺欒緭鍏ヤ竴涓崟璇嶉渶瑕10鍒嗕箣涓绉掓垨鑰呮洿涔咃紝閭d箞浣犲氨闇瑕佹帶鍒朵綘鐨刟jax璇锋眰鐨勯棿闅旓紝鑰屼笉鏄瘡娆ress涔嬪悗閮界珛鍒诲幓杩涜ajax璇锋眰锛岃嚦灏戣鍦ㄩ偅10浠戒箣涓绉掗挓璁╀綘鐨勬枃鏈澶勪簬浼戠湢鐘舵併

鎵浠ュ氨浼氫骇鐢熻繖涔堜竴涓濂囩殑绫讳技closure鐨勪竴绉峧avascript鏂规锛屼笅闈㈡槸鍒涘缓杩欎釜鏂规硶鐨勪竴涓畝鍗曠殑渚嬪瓙锛

function throttle(fn, delay) {var timer = null;return function () {
聽 聽 var context = this, args = arguments;
聽 聽 clearTimeout(timer);
聽 聽 timer = setTimeout(function () {
聽 聽 聽 fn.apply(context, args);
聽 聽 }, delay);};
}

濡傛灉浣犳槸鍦ㄧ敤jquery鏉ュ伐浣滅殑璇濓紝濡傛灉浣犺鍐欎竴涓猭eypress鐨勬娴嬶紝浣犲彲浠ュ儚涓嬮潰杩欐牱浣跨敤锛

$('input.username').keypress(throttle(function (event) {// do the Ajax request
}, 250));

杩欓噷鐨勫叧閿瘝鏄痶his鍜岄偅涓猘rgs锛宼his鍏跺疄灏辨槸浣犻鏈熺殑閭d釜input锛岃宎rgs鏄紶鍏ョ殑event瀵硅薄锛岄氳繃杩欎釜鏂规硶浣犲氨鍙互鍑嗙‘鐨勬帶鍒朵綘鐨刟jax璇锋眰鏄痯ress涓娆$殑涔嬪悗250姣杩囧悗鍐嶆瑙﹀彂浜嗐

澶ф灏辨槸杩欎箞涓绡囨枃绔狅紝浣嗘槸鎴戞壙璁や互鍓嶇‘瀹炴病鏈夋敞鎰忓埌杩囷紝鍏充簬閭d釜throttle鍑芥暟锛屾垜鍦╢irebug閲屾娴嬩簡涓嬶紝閲岄潰鏈涓嶆槑鐧界殑鍏跺疄灏辨槸閭d釜this鍜宎rgs銆傞氳繃鏂偣鎴戞娴嬪嚭鏉ヤ簡锛岃櫧鐒朵粬鏂囩珷鏈鍚庝篃鍛婅瘔浜嗐

鎭╋紝鏈鍚庡鏋滀綘涓嶇敤jquery鐨勮瘽锛屽師濮嬬殑js濡備綍浣跨敤杩欎釜鍑芥暟鍛紵

document.getElementById(‘page’).onclick=throttle(function(e){
alert(e);
alert(‘3000 later’);
},3000)

鎭┿傘傘傚氨鏄繖涔堢畝鍗曗︹_^

瀵逛簡 杩欎釜鏂囩珷鐨勪綔鑰呮尯NB鐨勶紝鎴戜篃鎺ㄨ崘璁㈤槄浠栫殑tw鍜宺ss鈥︹

鍏充簬call鍜宎pply

鏄熸湡涓, 5鏈 19th, 2010

鍟婏紝缇ら噷涓轰簡甯姪鎴戞彁楂榡s姘村钩锛屽嚭浜嗛亾姣旇緝鑰冨療鍩虹鐨勯鐩紝浠栦滑璇磋澊铦朵功閲屾湁绛旀锛屾垜纭疄蹇樿浜嗭紝涔熶笉鐭ラ亾鍐欑殑瀵逛笉瀵癸紝浣嗘槸娴嬭瘯浜嗕笅锛屼唬鐮佽繕绠楀畬鍠勩

棰樻槸杩欐牱鐨勶細

/*
Whyme 14:49:13
JS涓亣濡侳unction.prototype.call涓嶅瓨鍦
浣咶unction.prototype.apply瀛樺湪
璇曠敤鍚庤呭疄鐜板墠鑰.(鍏朵綑js 1.5鐗规т篃鍏峰)
*/

鎴戝啓浜2涓増鏈紝绗竴涓湁鐐归敊锛屽氨涓嶅彂浜嗐傘傜2涓彂鍑烘潵鐪嬩笅锛

Function.prototype.call=function(){
var type=typeof arguments[0] == ‘function’ || typeof arguments[0] == ‘object’;
switch (arguments.length){
case 0:
return this.apply();
break;
case 1:
if(type){
return this.apply(arguments[0]);
}else{
throw new Error(arguments[0]+’ is not provide’);
}
break;
default:
if(type){
var ary = [];
for (var i = 0; i < arguments.length; i++) {
ary.push(arguments[i + 1]);
}
return this.apply(arguments[0], ary);
}else{
throw new Error(arguments[0]+’ is not provide’);
}
};
};

绠鍗曠殑娴嬭瘯浜嗕笅鈥︹﹀啀绠鍖栨垜灏变笉鐭ラ亾鎬庝箞鍐欎簡銆傘傘

缁忚繃鍙20鍒嗛挓鐨勬濊冦傚緱鍒颁笅闈㈢簿绠鐗堟湰- -||

Function.prototype.call = function(){
var type=typeof arguments[0] == ‘function’ || typeof arguments[0] == ‘object’ || arguments[0]!=’undefined’;
if (type){
var ary = [];
for (var i = 0; i < arguments.length; i++) {
ary.push(arguments[i + 1]);
}
return this.apply(arguments[0], ary);
}else{
throw new Error(arguments[0]+’ is undefined’);
}
};

鏈熷緟鏇寸簿绠鐨勩傜壒姝よ褰曘傘傘

鍙插姫姣旂殑锛氾紙娌$粡娴嬭瘯鈥︹︼級

Function.prototype.call = (function() {
var slice = Array.prototype.slice;
return function () {
var args = slice.apply(arguments)
, context = args.shift();
return this.apply(context, args);
}
})();

纭疄姣旀垜鐨勭煭鈥︹﹀搸- -蹇樿鐢╝rray瀵硅薄閲岀殑閭e嚑涓柟娉曚簡鈥︹//浣嗘槸鎴戣涓轰粬娌″thisObj鍋氭鏌ワ紝搴旇鍙兘鏄釜闅愭偅- -锛

鏈鍚庣殑缁撴灉鏄病鏈夌被鍨嬫鏌ュ崐姣涢挶鍏崇郴锛屽紓甯稿叏閮ㄤ氦缁檃pply澶勭悊锛屾埅鍙栧弬鏁版暟缁勪娇鐢╝rray瀵硅薄鐨勬柟娉曪紝瀹屼簨銆傛垜鎯冲お澶氫簡銆傘傘備笉濂芥剰鎬- -||