JavaScriptシングルトンメソッドの_.bindAll()

次のコードのメソッドobj2.method1は別のオブジェクトから呼び出されます。 どうすればobj2からobj1を参照できるように "this context"をバインドできますか?

var singleton = {
  obj1 : {
     a : 5
  },

  obj2 : {
    method1 : function(){
       this.obj1.a; //undefined
    }
  }
}

アンダースコア_.bindAll()を使用してみました - これらの行に沿って何か - 失敗しました...

var singleton = {
  obj1 : {
     a : 5
  },

  obj2 : {
    method1 : function(){
       this.obj1.a; //undefined
    }
  },
  init : function(){
       _.bind(this, obj2.method1)
  }
}

singleton.init();

ありがとう:)

1
@ŠimeVidas:うーん、しかし、私は他のオブジェクトが適用を使用してメソッドを呼び出すと思います。私はオーバーライドしたい...
追加された 著者 dani,
singleton.obj1.a は動作します...
追加された 著者 Šime Vidas,
私はまったくあなたに従っていない...
追加された 著者 Šime Vidas,

1 答え

  1. You need to reassign singleton.obj2.method2() with the results of _.bind():

    // in .init():

    this.obj2.method1 = _.bind(this.obj2.method1, this)

  2. To have singleton.init() have a proper this when called, you need to specify it explicitly:

    singleton.init.call(singleton)

完全なデモンストレーションはこちら。しかし、シングルトンパターンは、 < a href = "http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/" rel = "nofollow">悪い、 m'kay

1
追加された
それは素晴らしい答えです。ありがとう:)ちなみに、シングルトンパターンの代わりに、シンプルな "ヘルパーユーティリティ"を考えようとしているこのケースでは、何をお勧めしますか?このユーティリティには、さまざまなヘルパーメソッドで参照できる一連のアプリケーション設定(init()で初期化する必要があるもの)が格納されている必要があります。私は、他のアプリケーションオブジェクトが与えられた引数と設定の両方に基づいていくつかの一般的な計算を実行するようにこのヘルパーに依頼できるので、シングルトンはOKだろうと思いましたか?再度、感謝します。
追加された 著者 dani,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript