レシーバーオブジェクトを指定する(Underscore.jsとかで)

投稿日:

こんにちは。

今現在、Backbone.js/Underscore.jsの勉強をたまにやっています。
目からうろこがボロボロ落ちるくらい便利だよこれ。
なんでそんなに流行ってないんじゃろか。
※wordpress(3.5.2) からデフォルトで含まれる様になっているからこれからくる!?

それはまぁいいとして、今回は書いていてちょっと役立った事をメモしてみる(1つだけ)。

レシーバーオブジェクト(context)を指定する

underscoreで用意されている便利関数delayとかdeferとかthrottleとか他にもたくさんありますが、自分はこう書いていたんです。
(thisを束縛する時)

var self = this;
_.delay({
    self.something();
}, 1000);

でも、これいっつもthisを退避させるのってメンドクセーです。
んで、これを回避する策として使えるのがESにて関数オブジェクトでサポートされる様になった bind() です。
これは何をするかっていうと、レシーバーオブジェクトを指定してくれるものです。contextって言ってもいいのかな。
よくあるthis問題のやつ。詳しくはググってください。

bindを使うとさっきのはこう書けます。

_.delay({
    this.something();
}.bind(this), 1000);

あらいいですね。

ちなみに、多分jQueryのeachとかもこうやって書けるかな。

jQuery.each(ele, function(key, val) {
    this.something();
}.bind(this));

あらいいですね。

いっつもthisを退避させるのメンドクセーなぁとか、selfとかthatとかmeとかメンドクセーなって人、はたまたレシーバーに気をつける場合とか、お試しあれ。

尚、bind()はES5からサポートされた様なので対応ブラウザには注意です。
※この辺りあんまり調べていませんっ!!

作成者: shimabox

Web系のプログラマをやっています。 なるべく楽しく生きていきたい。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください