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