Javascript ES6 class 变量

Javascript ES6 class variables

使用 Mongoose 探索 Javascript ES6 classes 并且在访问 class 变量时遇到问题。我想在 cursor.on(data) 事件中使用 this.name,引用在 class 的构造函数中声明的变量。我怎样才能做到这一点?

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

    }
}

如果您使用的是 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')
        });

    }
}

值得注意的是,这不是一个 "class variable",它是一个实例变量。