2017-02-06 1 views
0

私はES6構文スタイルを使用してnode.jsの継承クラスを作成しています。ベースクラスはmqttクライアントを構築する2つのクラスがあり、継承クラスは基本クラスを拡張するクラスです。継承されたクラスは、node.js ES6スタイルのクラスの基本クラスで定義された変数を使用できません。

しかし、問題は、継承されたクラスは、基本クラスで定義された変数を使用することはできません。例えば

が、私の基本クラスで、というパブリック変数があります: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); 
    } 
    .............. 
} 
+0

単純なタイプミスによって引き起こされる質問は、将来の使用のためにそれらを保持する価値がほとんどないため、おそらくオフトピックと見なされるため、投票を終了してください。 – jfriend00

答えて

1

基本クラスのinit関数が呼び出されていると仮定して、this.mqtt_clientを定義しています。

この問題は、self.mqtt_clientを使用する必要があるself.mqttClientを使用していると、スペルが間違っているようです。

副次的な注意点として、共通の変数命名体系を使用して、将来このような問題を避けるようにしてください。大部分のJavaScriptコードは、ラクダの大文字小文字を使用して書かれていますが、アンダースコアを使用するルールはありません。重要なことは一貫していることです。

1

エラーは完全に正しいです。 mqttClientは未定義です。

基本クラスの無関係なmqtt_clientフィールドは何も変更されません。

関連する問題