我正在使用Javascript"班级",我有一个家长"班级"使用变量和函数,就像这样
function WS() {
this.auth = { client: '', password: '' };
this.Execute = function(url, callback) {
soap.createClient(url, function(err, client) {
if (err) return callback(err);
return callback(null, client);
});
}
}
"子类"使用此函数和变量,如此
function Stats() {
this.url = 'http://';
this.emailsByDate = function(params, callback) {
this.Execute(this.url, function(err, client) {
if (err) return callback(err);
client.Get(this.auth.concat(params), function(err, results) {
if (err) return callback(err);
return callback(results);
});
});
}
}
Stats.prototype = new WS;
我正在通过 this.Execute()功能,但 this.auth 变量未定义,为什么会这样?
答案 0 :(得分:2)
您访问this.auth
的上下文不是您的Stats
函数,而是您的匿名回调函数。
您可以将this.auth
的值保存在回调函数之外:
function Stats() {
var auth = this.auth
this.url = 'http://';
this.emailsByDate = function(params, callback) {
this.Execute(this.url, function(err, client) {
if (err) return callback(err);
client.Get(auth.concat(params), function(err, results) {
if (err) return callback(err);
return callback(results);
});
});
}
}
或者您可以将回调函数的上下文绑定到Stats
函数的上下文:
function Stats() {
this.url = 'http://';
this.emailsByDate = function(params, callback) {
this.Execute(this.url, function(err, client) {
if (err) return callback(err);
client.Get(this.auth.concat(params), function(err, results) {
if (err) return callback(err);
return callback(results);
});
}.bind(this));
}
}