2017-05-07 80 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

谁知道错误的'这个'在非箭头lambda里面的伪造? – naomik

+0

@naomik只是标准的一个:-) – Bergi

+0

谢谢Bergi^_^ – naomik

回答

2

如果您使用ES6,使用 ES6箭头功能,这妥善保存this方面:

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