我试图建立一个对象,使其具有封装的$ .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
您的第一次尝试已经结束,但是正如您所说的,您无法this在回调内部进行访问,因为它引用了其他内容。而是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; }