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

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


我收到setUpErrorBox和setValSummary不存在的错误(它们不存在)。如何引用它们?我尝试了this.setValSummary这是行不通的。

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

最佳答案

使用闭包保留执行上下文:

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

09-17 06:40