javascript - "this"返回函数而不是对象

标签 javascript jquery ajax foreach this

在下面的 JavaScript 代码中,我想知道“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>

最佳答案

它对我有用:

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

也许您正在某处重新绑定(bind) paper.populate

关于javascript - "this"返回函数而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32334200/

相关文章:

javascript - 在 AJAX 加载的部分 View (MVC4) 上使用自动完成 (Jquery)

javascript - JS 中的parentacess 函数是如何工作的?

javascript - 我如何使用 jQuery 循环水平画廊?

javascript - 无法使用 jQuery animate() 使元素对 Angular 移动

javascript - 避免在元素上绑定(bind)多个事件

javascript - 暂时允许使用 TouchSwipe 插件垂直滚动

javascript - 更改 AJAX 加载内容的元素

javascript - 用于 AJAX 登录表单的 bootbox + jQuery.validator 不起作用

javascript - 从 Vision API 文本检测中读取并填充适当的字段

javascript - Google Analytics 虚拟综合浏览量跟踪代码记录的综合浏览量不一致