【问题标题】:ES6 class method not present in instance实例中不存在 ES6 类方法
【发布时间】:2018-06-11 13:04:14
【问题描述】:

我正在更新我的旧 node.js 项目以包含 ES6 功能,以便最终迁移到 typescript,但我无法让这个类工作。我在一个单独的文件中定义了一个类:

class Database {

constructor(connectionPool) {
    this._connectionPool = connectionPool;
}

_getConnection () {
    console.log("getting connection");
    return new Promise((resolve, reject) => {
        this._connectionPool.getConnection((err, connection) => {
            if (err) {
                reject(err);
                console.log("connection rejected");
            } else {
                console.log("connection resolved");
                resolve(connection);
            }
        });
    });
}
}
module.exports = Database;

然后我将这个类导入另一个文件并尝试创建一个数据库实例:

const mysql = require('mysql');
const Database = require('./database');

module.exports = databaseInitializer;

function databaseInitializer(config) {

    const pool = mysql.createPool(config);
    const db = new Database(pool);
    console.log(Database.toString());
    console.log(db.__proto__);
    return db;
}

最后,我使用上面的函数来获取数据库实例:

const database = require('./models/databaseInitializer')(mysqlConfig);
console.log(database);

现在,我的数据库实例有一个_connectionPool 属性,但没有原型,更重要的是,没有_getConnection 属性。 我错过了什么?

感谢和问候

【问题讨论】:

  • 它没有原型”是什么意思?当然db.__proto__ 不是null。顺便说一句,不要使用已弃用的 __proto__ getter,使用 Object.getPrototypeOf(db)
  • class 方法不可枚举。可能节点的console.log 不会因此而打印出来。

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


【解决方案1】:

_getConnection属性属于database的原型,因此该属性是database的不可枚举属性

你可以通过这样做来访问这个属性

console.log(database._getConnection) //should show the function

【讨论】:

  • 你是对的,谢谢,我的问题是由其他原因引起的
猜你喜欢
  • 1970-01-01
  • 2016-04-12
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-09
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多