小编典典

将$ .getJSON()与JavaScript对象内的回调一起使用

ajax

我试图建立一个对象,使其具有封装的$ .getJSON方法。这是我的设置:

function Property(price, deposit){
  this.price = price;
  this.deposit = deposit;
  this.getMortgageData = function(){
    $.getJSON('http://example.com/index?p='+this.price+'&d='+this.deposit+'&c=?', function(data){
        this.mortgageData = data;
    });
  }
  return true;
}

现在的问题似乎是我没有访问有意义的getJSON回调函数中的“ this”。

这种功能是否有解决方法,或者我只是在想完全错误的方式?我以前只真正使用过PHP OO编码,所以JS OO对我来说有点新。

我尝试过的其他事情是:

  function Property(price, deposit){
  this.price = price;
  this.deposit = deposit;
  this.getMortgageData = function(){
    this.mortgageData = $.getJSON('http://example.com/index?p='+this.price+'&d='+this.deposit+'&c=?', function(data){
        return data;
    });
  }
  return true;
}

但是,

var prop = new Property();
prop.getMortgageData();
// wait for the response, then
alert(prop.mortgageData.xyz); // == undefined

阅读 215

收藏
2020-07-26

共1个答案

小编典典

您的第一次尝试已经结束,但是正如您所说的,您无法this在回调内部进行访问,因为它引用了其他内容。而是this在外部作用域中分配另一个名称,然后访问该名称。回调是一个闭包,可以在外部范围内访问该变量:

function Property(price, deposit){
  this.price = price;
  this.deposit = deposit;
  var property = this; // this variable will be accessible in the callback, but still refers to the right object.
  this.getMortgageData = function(){
    $.getJSON('http://example.com/index?p='+this.price+'&d='+this.deposit+'&c=?', function(data){
        property.mortgageData = data;
    });
  }
  return true;
}
2020-07-26