Javascript对象和这个

标签 javascript jquery ajax this

function robot(robotId) {
  this.id = robotId;
  this.parts = new Array();

  this.collectParts = function() {
    $.getJSON('some/url', function(json) {
      for(i in json.responses) {
        this.parts = json.responses[i].parts;
      }
    });
  }
}

我实际上如何分配 this.parts?

最佳答案

将对 this 的引用(当它在适当的范围内时)分配给一个变量,并在已更改 this 范围的函数中使用该变量。在下面代码的修改版本中,robotInstance 是我选择使用的变量:

function robot(robotId) {
  var robotInstance = this;

  this.id = robotId;
  this.parts = new Array();

  this.collectParts = function() {
    $.getJSON('some/url', function(json) {
      for(i in json.responses) {
        robotInstance.parts = json.responses[i].parts;
      }
    });
  }
}

编辑: 我昨晚写了这个修改,然后决定不发布它。但是根据@Ӫ_._Ӫ 对您的问题的评论,我决定向您展示我编写代码的方式:

var robot = function( robotId )
{
  this.id = robotId;
  this.parts = [];
};
robot.prototype = {
  collectParts: function()
  {
    var robotInstance = this;

    $.getJSON(
      'some/url',
      function( json )
      {
        var i,
            responses = json.responses;
        for( i in responses )
        {
          if( Object.prototype.hasOwnProperty.call( responses, i ) )
          {
            robotInstance.parts = responses[i].parts;
          }
        }
      }
    );
  }
};

关于Javascript对象和这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844416/

相关文章:

javascript - jQuery - 在 html 字符串中隐藏一个元素

javascript - 剧作家强制点击隐藏元素不起作用

javascript - ('afterChange' 上的光滑 slider )

Javascript 停止一个事件

javascript - 为什么 .done() 方法在 $getJSON 调用完成执行之前完成执行?

c# - 在每个页面回发时弹出 jQuery 对话框

jquery - 如何定位没有类或 id 但具有所有这些特定样式属性的 div

javascript - 获取选中复选框的值

php - 阻止外部访问 PHP 脚本但允许 AJAX

javascript - Knockout.js foreach 非常慢