Javascript子类不继承父变量

时间:2014-08-08 17:40:03

标签: javascript node.js

我正在使用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 变量未定义,为什么会这样?

1 个答案:

答案 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));
  }
}