2016-01-17 345 views
-1

我有一個HTML頁面這段JavaScript在頁面的主體部分Javascript對象屬性的回調函數無法訪問

JSFiddle link(我是新來的jsfiddle,無法得到它的工作,任何幫助的這是讚賞...)

Firebug控制檯顯示我在request0undefinedonErrorcallback0。我有兩個問題,爲什麼我不能訪問onError中的this.loadErrors,以及如何實現此錯誤計數器?

編輯:源代碼

var loader = new Loader(); 
loader.request(callback); 

function callback(){ 
    console.log("loader.loadErrors in callback: " + loader.loadErrors); 
} 

function Loader(){ 
    this.loadErrors = 0; 

    this.request=function(callback){ 
     for (var i = 0; i < 3; i++){ 
      console.log("this.loadErrors in request: " + this.loadErrors); 
      $.ajax("example", {error: onError}).done(callback); 
     } 
    } 

    function onError(){ 
     console.log("this.loadErrors in onError: " + this.loadErrors); 
     // this.loadErrors++; 
     callback(); 
    } 
} 

回答

1

代碼弄亂this關鍵字。

onError從代碼外調用,它的this指向一個未知對象(可能爲null)。

爲了防止這種情況發生,你有兩個選擇之一:

  1. bind()onError()功能,以您的Loader調用前:在

    this.request=function(callback){ 
        for (var i = 0; i < 3; i++){ 
         console.log("this.loadErrors in request: " + this.loadErrors); 
         $.ajax("example", {error: onError.bind(this)}).done(callback); 
        } 
    } 
    
  2. 將其綁定到Loader創作:

    var _this = this; 
    function onError(){ 
        console.log("this.loadErrors in onError: " + _this.loadErrors); 
        // _this.loadErrors++; 
        callback(); 
    }