2017-05-07 13 views
1

Mongooseを使ってJavascript ES6クラスを調べ、クラス変数へのアクセスに問題があります。私はcursor.on(data)の中にthis.nameというイベントを使用して、クラスのコンストラクタで宣言された変数を参照します。どうすればこれを達成できますか?Javascript ES6クラス変数

'use strict'; 
const Mongo = require('../mongo') 
class Example { 
    constructor() { 
     this.name = 'Test Class'; 
    } 

    export(docId, callback) { 
     console.log('In export' + docId); 
     const cursor = Mongo.findDocById(docId); 
     console.log(this.name); // Prints "Test Class" 
     cursor.on('data', function (document) { 
      console.log(document); 
      console.log(this.name); // Prints "undefined" 
     }); 
     cursor.on('close', function() { 
      Mongo.close(); 
      callback(null, 'Success') 
     }); 

    } 
} 
+0

これは、非矢印ラムダの中に間違った 'this'の欺瞞を誰が知っていますか? – naomik

+0

@naomikちょうど標準的なもの:-) – Bergi

+0

ありがとうBergi^_^ – naomik

答えて

2

あなたはES6、使用正しくthisコンテキストを維持 ES6矢印機能使用している場合:

class Example { 
    constructor() { 
     this.name = 'Test Class'; 
    } 

    export(docId, callback) { 
     console.log('In export' + docId); 
     const cursor = Mongo.findDocById(docId); 
     console.log(this.name); // Prints "Test Class" 

     cursor.on('data', document => { 
      console.log(document); 
      console.log(this.name); // Prints "undefined" 
     }); 

     cursor.on('close',() => { 
      Mongo.close(); 
      callback(null, 'Success') 
     }); 

    } 
} 

をそれはインスタンス変数だ、それは「クラス変数」ではありません注目に値します。

+0

答えをありがとう。それは期待どおりに動作します。 – maddy

関連する問題