2015-09-01 51 views
1

在下面的javascript代碼中,我想知道哪個對象「this」指向。但是相反,我得到一個函數。「this」返回一個函數而不是對象

我認爲「this」總是指向調用該函數的對象。 那麼任何人都可以解釋爲什麼這種行爲?

$(document).ready(function() { 
 

 
    var Paper = function() {}; 
 

 
    Paper.prototype = { 
 
    populate: function(data) { 
 
     data.questions.forEach(function(entry) { 
 
     //printing a function instead of object 
 
     console.log(this); 
 
     }.bind(this)); 
 
    } 
 
    }; 
 

 

 
    var paperDataLoader = function() { 
 
    this.callbacks = []; 
 
    }; 
 

 
    paperDataLoader.prototype = { 
 

 
    //accepts a callback to notify the registered function 
 
    registerDataLoaded: function(callback) { 
 
     this.callbacks.push(callback); 
 
    }, 
 

 
    //calls the callback functions when data is loaded 
 
    loadData: function() { 
 
     $.ajax('../find_paper.php', { 
 
     method: 'POST', 
 
     contentType: 'text' 
 
     }).done(function(ajaxData) { 
 
     this.paperData = $.parseJSON(ajaxData); 
 
     for (var i = 0; i < this.callbacks.length; i++) 
 
      this.callbacks[i](this.paperData); 
 
     }.bind(this)); 
 
    } 
 
    }; 
 

 

 
    var loader = new paperDataLoader(); 
 
    var paper = new Paper(); 
 
    loader.registerDataLoaded(paper.populate); 
 
    loader.loadData(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

'this'的值根據其上下文而變化。哪條線路遇到問題? – Halcyon

+0

line with console.log – Flake

回答

1

它的工作對我來說:

var Paper = function() {}; 

Paper.prototype = { 
    populate: function(data) { 
     data.questions.forEach(function(entry) { 
      console.log(this); 
     }.bind(this)); 
    } 
}; 

var paper = new Paper(); 
paper.populate({ questions: [ 1 ] }); // prints paper object 

也許你重新結合paper.populate地方?

+0

我存儲paper.populate在一個paperDataLoader.callbacks數組中,然後當ajax請求成功時調用.done()方法 – Flake

+0

嘗試調用paper.populate就像我有 – Flake

相關問題