[解決済み] Underscore.jsの_.bindAll()関数の解説が必要です。
質問
私はbackbone.jsをいくつか学んでいて、たくさんの例を見てきました。
_.bindAll()
が使われている例をたくさん見ました。私はbackbone.jsとunderscore.jsのドキュメントページを全部読んで、それが何をするものなのかを理解しようとしましたが、まだ非常に曖昧なままです。以下、underscoreの説明です。
_.bindAll(object, [*methodNames])
オブジェクトのいくつかのメソッドを メソッド名で指定された、そのオブジェクトの そのオブジェクトのコンテキストで実行されるように で実行されるようにします。非常に便利です。 イベントハンドラとして使用される関数のバインドに イベントハンドラとして使用されるバインディング関数に非常に便利です。 で呼び出されます。 で呼び出されることになります。もし、methodNames を指定しない場合、オブジェクトのすべての の関数プロパティが結合されます。 にバインドされます。
var buttonView = { label : 'underscore', onClick : function(){ alert('clicked: ' + this.label); }, onHover : function(){ console.log('hovering: ' + this.label); } }; _.bindAll(buttonView); jQuery('#underscore_button').bind('click', buttonView.onClick); => When the button is clicked, this.label will have the correct value...
もしあなたが別の例や口頭での説明を与えることによって、ここを助けることができるなら、何でもありがたいことです。より多くのチュートリアルや例を検索しようとしましたが、私が必要とするものを提供するものは見つかりませんでした。ほとんどの人は、それが自動的に行うことを知っているだけのようです。
どのように解決するのですか?
var Cow = function(name) {
this.name = name;
}
Cow.prototype.moo = function() {
document.getElementById('output').innerHTML += this.name + ' moos' + '<br>';
}
var cow1 = new Cow('alice');
var cow2 = new Cow('bob');
cow1.moo(); // alice moos
cow2.moo(); // bob moos
var func = cow1.moo;
func(); // not what you expect since the function is called with this===window
_.bindAll(cow1, 'moo');
func = cow1.moo;
func(); // alice moos
<div id="output" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
残念ながら、実際の "bind all" 機能はオブジェクトの右側の関数に対してのみ機能します。プロトタイプ上で定義された関数をインクルードするには、それらの関数名を明示的に追加の引数として
_.bindAll()
.
とにかく、あなたは説明を求めていました。基本的には、オブジェクト上の関数を、同じ名前と振る舞いを持ち、かつそのオブジェクトにバインドされている関数に置き換えることができます。
this === theObject
メソッドとして呼び出さなくとも (
theObject.method()
).
関連
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] オブジェクトのためのマップ関数(配列の代わりに)
-
[解決済み] CodeMash 2012の'Wat'トークで言及された、この奇妙なJavaScriptの動作の説明とは?
-
[解決済み】「GET」パラメータから値を取得する(JavaScript)【重複】。
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
-
[解決済み】underscore.jsの_.each関数を解除する方法
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?