JS范围/参考问题

时间:2014-05-17 11:58:54

标签: javascript

我有一个JS模块:

var myModule = {

   f1 : function(){...},

   f2 : function(){...},

   f3 : function(){

   // this works
   this.f2();

   var objRef = this;

   chrome.alarms.onAlarm.addListener(function(){

          // this works
          objRef.f2();

          // this doesn't work
          this.f2();

   }

当从f3中的监听器块的主体使用它调用f2时,我无法调用它,可能是因为范围问题。

问题:有没有办法避免objRef解决方案从侦听器的主体引用f2函数?

1 个答案:

答案 0 :(得分:2)

尝试Function.prototype.bind()

chrome.alarms.onAlarm.addListener((function(){

  // this works
  objRef.f2();

  // this will now work!
  this.f2();

}).bind(this));

更简单,更清晰的方法( - 如果f2的调用是唯一要执行的语句):

chrome.alarms.onAlarm.addListener( this.f2.bind(this) );