JavaScript tekil yöntemleri üzerinde _.bindAll ()?

Aşağıdaki kodda obj2.method1 yöntemi başka bir nesneden çağrılır. Obj1'den obj2'ye başvurabilmek için "bu bağlamı" nasıl bağlarım?

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

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

Ben bu satırlar boyunca bir şey _.bindAll() - alt çizgi kullanarak denedim ama başarısız oldu ...

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

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

singleton.init();

Teşekkürler :)

1
@ ŠimeVidas: Hmm, ama bence diğer nesne uygulayarak yöntemi çağırıyor. Hangisini geçersiz kılmak istiyorum ...
katma yazar dani, kaynak
singleton.obj1.a çalışırdı ...
katma yazar Šime Vidas, kaynak
Seni takip etmiyorum.
katma yazar Šime Vidas, kaynak

1 cevap

  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)

Tam gösteri buradaki . Ancak, Singleton deseninin < olduğunu unutmayın. < a href = "http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/" rel = "nofollow"> kötü , m'kay ?

1
katma
Bu harika bir cevap. Teşekkürler :) Bu arada - tekil desen yerine, ben basit bir "yardımcı programı" ile gelmeye çalışıyorum bu durumda ne önerirsiniz. Yardımcı program, bir takım uygulama ayarlarını (bazıları init() üzerinde başlatılması gerekir) farklı yardımcı yöntemlerinde referans gösterebilmelidir. Diğer uygulama nesneleri daha sonra her iki argüman ve ayarlara dayalı bazı ortak hesaplamalar yapmak için bu yardımcısı sorabilirsiniz gibi tek bir singleton olacağını düşündüm. Tekrar teşekkürler.
katma yazar dani, kaynak