我有一个看起来像这样的JS对象。
function Product() {
this.prop1 = 1;
this.prop2 = 2;
}
function Work(values) {
this.prodID = 0;
this.anotherProp = 1;
this.updateProductID = function(newProdID) {
var sourceURL = "the URL here";
alert("ID is: " + this.product.prodID); //displays 0
$.getJSON(sourceURL, function(data) {
//I want to update the property like this
this.product.prodID = data.Products.ProductID;
})
};
我要做的是做一个json调用并填充Work对象实例的product.ProdID属性,但我总是得到this.product是未定义的。
答案 0 :(得分:2)
由于您位于anonymous function
范围内,因此您的上下文会发生变化。 cache
您的上下文引用很常见,您可以通过闭包访问:
function Work(values) {
var self = this;
self.prodID = 0;
self.anotherProp = 1;
self.updateProductID = function(newProdID) {
var sourceURL = "the URL here";
alert("ID is: " + self.product.prodID); //displays 0
$.getJSON(sourceURL, function(data) {
//I want to update the property like this
self.product.prodID = data.Products.ProductID;
});
};
}
另一种方式,可以通过jQuerys proxy
方法$.proxy()
上下文。
this.updateProductID = $.proxy(function(newProdID) {
// this is now pointing to the "outer" this
}, this);
这是通过使用Javascripts .call()
/ .apply()
方法完成的,该方法会覆盖被调用函数的this
。
答案 1 :(得分:0)
this
更改了附件内部。您应该首先存储this
:
var upper_this = this;
this.updateProductID = function(newProdID) {
var sourceURL = "the URL here";
alert("ID is: " + this.product.prodID); //displays 0
$.getJSON(sourceURL, function(data) {
//I want to update the property like this
upper_this.prodID = data.Products.ProductID;
})
};