导出的类中可以有私人成员吗?

问题描述 投票:0回答:2

我知道,除非导出,否则所有内容在node.js中都是私有的。

我找不到导出整个类的其他方法,但我的目标是使从类导入到并实例化的地方无法访问privateMethod()

#!/usr/bin/env node

'use strict'

module.exports = class DBConnector {
    constructor() {}
    publicMethod() {}
    privateMethod() {}
}

是否有解决方案,还是必须将其公开?

提前感谢您的帮助。

javascript node.js class private module.exports
2个回答
1
投票

Java本身没有私有方法的概念。因此,如果您在类上定义方法,则任何引用该类实例的代码都可以调用该方法。方法定义没有Java专有的内容。

就是说,有许多变通办法可以使您的代码在私有对象上运行,而该对象不能从模块外部调用。这是几个例子:

'use strict'

// declare privateMethod that can only be called from within this module
function privateMethod(obj, args) {
   // private code here
}

module.exports = class DBConnector {
    constructor() {}
    publicMethod() {
        // call code for private method
        privateMethod(this, ...);
    }
}

这是真正的私有方法,因为该方法的代码不在原型上,因此无法从该模块外部发现或调用。当然,您必须稍微不同地调用它,因为它不是“真正的”方法。但这是因为所有“真实”方法都是可以从外部发现和调用的。

© www.soinside.com 2019 - 2024. All rights reserved.