[過去ログ] + JavaScript の質問用スレッド vol.117 + (1001レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
344
(2): デフォルトの名無しさん [sage] 2014/12/05(金) 14:41:34.64 ID:I0a9lIBJ(2/5) AAS
>>343
343(2): デフォルトの名無しさん [sage] 2014/12/05(金) 14:06:15.50 ID:LEC5N9e7(1/2) AAS
なんかbindで盛り上がってるけど、>>293はおかしな突っ込みどころなんて全く無く至って正論
> var getXFromModule = getX.bind(module); // この名前なら適切
いやいや、>>293
> var boundGetX = getX.bind(module);
で全く問題ないじゃん

他の変数(selfなど)にオブジェクトを代入しといて使うとか言ってる奴が居るが
>>293
> getX: function() { return this.x; }
のthis.xをself.xとかに書き換える無意味な変更が生じる
bindを使う使わないなんて議論する余地なんてない
boundGetX は直訳すると「縛られたGetX」だけど、何に bind されてるか、わかりずらいかなーと思った

var boundGetX = getX.bind(module),
var boundGetX = getX.bind(hoge);

どちらも boundGetX で意味は通るけど、何にbindされてるかわからない
>>308
308(4): デフォルトの名無しさん [sage] 2014/12/02(火) 13:27:53.03 ID:OQmm7jB2(1/3) AAS
jQueryにはbindに相当するものとして、$.proxyっていうのが有るのだけれど、
なんでbindがproxyという名前なのか昔から疑問だった。
prototypejsではbindという名前なのに。

最近その謎が解けた。それは変数にthisを代入すればいいから
bindは不要であるという話にもつながっていて、

例えば、>>293みたいなものは、bindで渡すべきじゃない。
なぜなら、getXは普通に考えると自分自身のxを返すという仕様であり、
外部から指定されるべきものじゃないから。

そして外部から指定するもの。例えばあるクラスにイベントハンドラを
設定するみたいなコード。そのイベントハンドラに匿名関数を渡すのではなく、
別のオブジェクトの関数を渡す時に、$.proxyを使ってオブジェクトをバインドする。
(普通は関数だけじゃなくてオブジェクトも指定する必要があるから)

バインドしたい時というのは、このように別のオブジェクトの関数への
プロキシとして使うことがほとんどだから$.proxyという名前なんだ。
の「getXは普通に考えると自分自身のxを返すという仕様であり」あたりは対象が不明だからそう思うのであって、module という対象が明確であればなんら問題はない
345: 344 [sage] 2014/12/05(金) 14:43:24.41 ID:I0a9lIBJ(3/5) AAS
些事だけど訂正しておく
× わかりずらい
○ わかりづらい
346
(2): デフォルトの名無しさん [sage] 2014/12/05(金) 15:02:00.85 ID:LEC5N9e7(2/2) AAS
>>344
まぁ無理やり変数に代入しようとするからだな
element.addEventListener('mousedown', module.getX.bind(module), false);
とか
module内で
element.addEventListener('mousedown', this.getX.bind(this), false);
とか、毎回bindすれば分かりやすい
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.038s