« svn export | トップページ | IE6でtextareaにwidth:80%とか指定するとフォーカスが当たったときににょきにょきサイズが変わるのを防ぐ »

2006年5月 2日 (火)

グローバル変数を使わずにsetTimeoutでthisを渡す。

Function.prototype.bind = function(object) {
	//関数のthisを取得
	var __method = this;
	//objectを退避
	var __object = object;
	//引数の配列を用意(ただし一番初めのthisをshiftして取り除く)
	var __arguments = arguments;
	for( var index = 0; index < __arguments.length-1; ++index )
		__arguments[index] = __arguments[index+1];
	__arguments.length = __arguments.length-1;
	//thisにbindした関数を実行する無名関数を返す。
	return function(){ __method.apply(__object, __arguments); }
}

function Obj1() {
	this.counter = 0;
	this.caller(2);
}

Obj1.prototype.caller = function( step ) {
	this.counter += step
	alert( this.counter );
	setTimeout( this.caller.bind(this, step), 100 )
}

obj1 = new Obj1();
こんな感じ。prototype.jsを使ってるならFunction.prototype.bindを使ったほうが早し。

|

« svn export | トップページ | IE6でtextareaにwidth:80%とか指定するとフォーカスが当たったときににょきにょきサイズが変わるのを防ぐ »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« svn export | トップページ | IE6でtextareaにwidth:80%とか指定するとフォーカスが当たったときににょきにょきサイズが変わるのを防ぐ »