需要在JS中编写代码的建议。这是我的代码:
function Book(name) {
this.name = name;
// Some vars need to be downloaded
$.ajax({
method: "POST",
url: "http://localhost/books.php"
}).done(function( res ) {
this.price = this.analyze(res); // <--WRONG
return this;
});
}
Book.prototype.analyze = function(res){
var output = 50 * res;
// do something
return output;
}
检查标记的行。什么是实现我在那里尝试的最佳方式?
答案 0 :(得分:2)
对于$ .ajax(),有一个参数'context'。你可以使用它。所以你的代码将是
function Book(name) {
this.name = name;
// Some vars need to be downloaded
$.ajax({
context: this,
method: "POST",
url: "http://localhost/books.php"
}).done(function( res ) {
this.price = this.analyze(res); // <-- not wrong any more
return this;
});
}
代码中的问题是函数中的'this'不是指外层类。您可以通过两种方式更改代码。
1)您可以将对象的外部上下文分配给某个变量并在函数中使用它。即。
function Book(name) {
var self = this;
this.name = name;
// Some vars need to be downloaded
$.ajax({
method: "POST",
url: "http://localhost/books.php"
}).done(function( res ) {
self.price = self.analyze(); // <--not wrong any more
return self;
});
}
2)另一个选择是让你的函数在适当的上下文中运行,例如$ .proxy()
function Book(name) {
var self = this;
this.name = name;
// Some vars need to be downloaded
$.ajax({
method: "POST",
url: "http://localhost/books.php"
}).done($.proxy(function( res ) {
this.price = this.analyze(); // <--not wrong any more
return this;
}, self));
}
答案 1 :(得分:1)
在$.ajax
行之前,添加var that=this;
。然后将<--WRONG
行更改为return that.getPrice();
。