私の読書によると、Model などの Backbone.js クラスを拡張する場合、かなり一般的なパターンは、次のようにコンストラクターで _.bindAll を呼び出すことです ( https://raw.github.com/eschwartz/backbone.googlemaps/を参照)。 master/lib/backbone.googlemaps.js ):
GoogleMaps.Location = Backbone.Model.extend({
constructor: function() {
_.bindAll(this, 'select', 'deselect', 'toggleSelect', 'getLatLng', 'getLatlng');
// etcetera
これが行われる理由は理解できますが、メソッド名を _.bindAll に明示的に渡す必要があるのはメンテナンス上の問題のようです。新しいメソッドを追加する場合は、それらを _.bindAll にも引数として追加することを覚えておく必要があります。
今日の初めに、これに対するやや冗長な解決策をここに投稿しました: https://stackoverflow.com/a/17977852/34806
しかし、次の単純な手法を使用すると、_.bindAll を呼び出す必要がまったくなくなるのではないでしょうか? つまり、「カスタム」メソッドを割り当てる慣習的な方法の代わりに、代わりにコンストラクター内の「this」にすべてをアタッチします。
constructor: function() {
this.foo = function() {};
this.bar = function() {};
}
この手法の欠点はありますか?