【问题标题】:Javascript ES6 class variables [duplicate]Javascript ES6类变量[重复]
【发布时间】:2017-10-05 19:00:33
【问题描述】:

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

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

    }
}

【问题讨论】:

  • 谁知道在非箭头 lambda 中错误 this 的欺骗?
  • @naomik 只是标准的 :-)

标签: javascript node.js mongoose ecmascript-6 es6-class


【解决方案1】:

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

    }
}

值得注意的是,它不是“类变量”,而是实例变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2020-05-03
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多