【问题标题】:inherited class can not use the variable defined in the base class in node.js ES6 styled class ?继承的类不能使用node.js ES6样式类中基类中定义的变量?
【发布时间】:2017-02-06 21:54:24
【问题描述】:

我在node.js中使用ES6语法风格做继承类,有两个类,基类是构建mqtt客户端,继承类是扩展基类。

但是,问题是继承的类不能使用基类中定义的变量。

例如,在我的基类中,有一个名为:this.mqtt_client 的公共变量,当我尝试在继承的类中使用此变量时,它总是给出未定义的问题

我的基类如下

var mqtt = require('mqtt'),
    EventEmitter = require('events').EventEmitter;

class MQTTBaseClass extends EventEmitter{

    constructor( option) {
        super();
        this.mqtt_client = null;
        this.uri = option.uri;
        this.mqttOptions.clientId = option.clientId;
    }

    init(uri, mqttOptions){
        this.mqtt_client = mqtt.connect( uri , mqttOptions ); 
        this.mqtt_client.on('connect', onConnectionSuccess);
        this.mqtt_client.on('error',onConnectionError);
        this.mqtt_client.on('message',onMessageReceived);
        ............
     }
}




class MQTTClass2 extends MQTTBaseClass{

    constructor(option) {
        super(option);
        var self  = this;
        var interval = setInterval(
            function() {
                    self.mqttClient.publish('dddd' , 'ddd' , { retain: false  },function(err){

                    })

        }, 5000);
  }
   ..............
}

【问题讨论】:

  • 投票结束,因为由简单错字引起的问题被认为是题外话,可能是因为保留它们以供将来使用几乎没有价值。

标签: node.js inheritance ecmascript-6


【解决方案1】:

我假设正在调用定义 this.mqtt_client 的基类 init 函数。

问题似乎是拼写错误,您使用的是self.mqttClient,而您应该使用self.mqtt_client

作为旁注,您应该尝试使用通用变量命名方案以避免将来出现此类问题:大多数 Javascript 代码是使用驼峰式大小写编写的,但没有禁止使用下划线的规则。重要的是要保持一致。

【讨论】:

    【解决方案2】:

    错误完全正确; mqttClient 未定义。

    基类中不相关的mqtt_client 字段不会改变任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2021-10-13
      相关资源
      最近更新 更多