关于JavaScript单例方法的_.bindAll()?

时间:2011-10-27 15:50:57

标签: javascript binding underscore.js

下面的代码中的方法obj2.method1是从另一个对象调用的。 如何绑定“this context”以便我可以从obj2引用obj1?

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 个答案:

答案 0 :(得分:1)

  1. 您需要使用singleton.obj2.method2()的结果重新分配 _.bind()

    // in .init():

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

  2. 要让singleton.init()在调用时拥有正确的this,您需要明确指定它:

    singleton.init.call(singleton)的

  3. 完整演示here。但请记住,Singleton模式is badm'kay