2017-05-07 1 views
1

Exploration des classes Javascript ES6 avec Mongoose et difficulté d'accès aux variables de classe. Je veux utiliser this.name à l'intérieur cursor.on(data) événement référençant la variable déclarée dans le constructeur de la classe. Comment puis-je atteindre cet objectif??Variables de classe ES6 Javascript

'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

qui connaît la dupe pour mal 'this' à l'intérieur d'une non-flèche lambda? – naomik

+0

@naomik Juste le standard :-) – Bergi

+0

Merci Bergi^_^ – naomik

Répondre

2

Si vous utilisez ES6, utilisation ES6 fonctions fléchées qui préservent correctement this contexte:

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') 
     }); 

    } 
} 

Il convient de noter que ce n'est pas une "variable de classe", il est une variable d'instance.

+0

Merci pour la réponse. Cela fonctionne comme prévu. – maddy