Prototype findet Funktion nicht?!

tsbmusic

Erfahrenes Mitglied
Moin moin,

ich hab hier ein Script was aber nicht funktioniert und ich den Fehler nicht finde. Also das was nicht funktioniert ist das das this._load in checkHash nicht ausgeführt weil, so firebug, _load keine Funktion ist.

Code:
function ajx(){
  this._hash = location.hash.replace("#!","");
  setInterval(this.checkHash,100);
}

ajx.prototype.checkHash = function(){
  current_hash = location.hash.replace("#!","");
  if(current_hash != this._hash){
    this._hash = current_hash;
    this._load(this._hash);
  }
}

ajx.prototype._load = function(url){
  return new Ajax.Request(url, {
    method: "GET",
    onSuccess: function(response){
      document.body.innerHTML = response.responseText;
      /*if(history && history.pushState){
        history.pushState(null, document.title, url);
      } else {*/
        url_href = url.split("/");
        url_l = url_href.length;
        url = url_href[url_l-1];
        location.hash = "!"+url;
        this._hash = url;
      //}
    }
  });
}
 
Hi,

das this läuft innerhalb der Methode setInterval im Scope des window-Objektes, nicht des ajx-Objektes. Wird es vorher in eine Closure-Variable übergeben, kann mittels einer anonymen Funktion darauf zugegriffen werden.

Beispiel:
Code:
function ajx(){
  // Closure
  var _this = this;
  window.setInterval(function(){_this.checkHash()}, 2000);
}

ajx.prototype.checkHash = function(){
  this._load(this._hash);
}

ajx.prototype._load = function(url){
  alert(new Date());
}
Ciao
Quaese
 
Zurück