如何使用ES6类模拟私有范围?

Rya*_*hel 3 javascript scope module class ecmascript-6

我正在尝试将我的代码从ES5模块迁移到ES6类.我当前的代码(模块,而不是类),如下所示:

var appleModule = (function() {
    var yummy = true;
    var publicEat = function() { }
    var privateEat = function() { }

    return { "eat": publicEat }
})();
Run Code Online (Sandbox Code Playgroud)

上面允许我创建私有变量和方法,我不会向我的环境中的其他Javascript对象/作用域公开.我喜欢.我想在ES6中我们现在有类,所以像这样的东西变成了重构的代码:

exports class appleModule {
    constructor {
        this.yummy = true;
    }

    publicEat() {

    }

    privateEat() {
        // How to make private?
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用这种新的基于类的语法创建私有变量和函数并不是一种好方法.新建议是否exports与先前的模块模式一起使用(关闭公共成员的返回对象)?如果没有,我怎么能像第一个例子那样模拟私有范围(希望没有下划线)?

Fel*_*ing 5

我想在ES6中我们现在有类,所以像这样的东西变成了重构的代码.

您的原始代码似乎表示类似于模块.类不是模块,但ES6现在具有对模块的本机支持.所以你的代码应该更有可能成为

var yummy = true;
var publicEat = function() { }
var privateEat = function() { }

export {publicEat as eat};
Run Code Online (Sandbox Code Playgroud)

并非一切都可以,已经或应该被建模为一个类.