投稿日:
こんにちは。
今現在、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からサポートされた様なので対応ブラウザには注意です。
※この辺りあんまり調べていませんっ!!