如何从另一个封装函数引用封装的javascript函数?

时间:2009-02-18 20:35:14

标签: javascript function scope

我是面向对象的javascript的新手。我有一个设置方法,我想a)检查一个元素是否为null,如果是,请等待并再次调用自己b)观察按钮的click事件。

ErrorBox.prototype.setUpErrorBox = function(btnClientID) {
    if (btnClientID == null) {
        setTimeout("setUpErrorBox()", 1000)
        return;
    }
    Event.observe(btnClientID, 'click', setValSummary);
}

我遇到的错误是setUpErrorBox和setValSummary不存在(他们没有)。我怎样才能参考它们?我试过了.setValSummary,但没有用。

换句话说,如何在javascript中从同一个类的另一个方法调用类的方法的等价物?

1 个答案:

答案 0 :(得分:2)

使用闭包来保持执行上下文:

ErrorBox.prototype.setUpErrorBox = function(btnClientID) 
{
   var box = this; // object context reference
   if (btnClientID == null) 
   {
      // use closure as event handler to maintain context
      setTimeout(function() { box.setUpErrorBox() }, 1000)
      return;
   }
   // again, use closure as event handler to maintain context
   Event.observe(btnClientID, 'click', function() { box.setValSummary() });
}

另见:JavaScript Callback Scope