Javascript Functionオブジェクト拡張の遅延実行関数

1327 ワード

windowオブジェクトのsetTimeoutを利用する方法ではないですか?Bingo、間違いないです一つのアプリケーションの中で常に「○○関数の実行を遅延させる」という場合、DRYの原則に基づいて、Functionのグローバルオブジェクトに対して拡張できます.関数のために遅延方法を追加します.delayのように、コードがより簡潔で効果的です.拡張機能Functionオブジェクトにdelayを追加する方法は以下の通りです.
 
  
Function.prototype.delay=function(this1,timeout){
this1=this1||null;
timeout=timeout||0;
var _this=this;
var args=[];
// , : 1、 2
switch(arguments.length){
case 1:
timeout=parseInt(arguments[0]);
timeout=isNaN(timeout)?0:timeout;
timeout=timeout<0?0:timeout;
break;
default:
for(var i=0;iif(i>1){args.push(arguments[i]);};
};
break;
};
var proxy=function(){
_this.apply(this1,args);
};
return window.setTimeout(proxy,timeout);
};
firefoxのfirebugプラグインのコンソールの下でテストします.コードは下記の通りです.
 
  
var xx=function(n){
this.name=n;
};
xx.prototype.hi=function(a,b){
console.log(this.name+"-"+a+"-"+b);
};
var xx1=new xx("levin");
var t=xx1.hi.delay(xx1,1000,"cocoa","yoyo");
xx1.hi("guluglu","jigujigu");