_.bindAll () в одноэлементных методах JavaScript? - PullRequest
1 голос
/ 27 октября 2011

Метод obj2.method1 в приведенном ниже коде вызывается из другого объекта. Как связать «этот контекст», чтобы я мог ссылаться на obj1 из obj2?

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 Ответ

1 голос
/ 28 октября 2011
  1. Вам необходимо переназначить singleton.obj2.method2() с результатами _.bind():

    // в .init ():

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

  2. Чтобы у singleton.init() был правильный this при вызове, вам нужно указать его явно:

    singleton.init.call (Singleton)

Полная демонстрация здесь . Но помните, шаблон Singleton - это плохо , м'кей ?

...