javascript - 如何用 ES6 类模拟私有(private)作用域?

标签 javascript class module scope ecmascript-6

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

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

    return { "eat": publicEat }
})();

上面的内容允许我创建私有(private)变量和方法,这些变量和方法不会暴露给环境中的其他 Javascript 对象/作用域。我喜欢。我想在 ES6 中我们现在有了类,所以像这样的东西变成了重构代码:

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

    publicEat() {

    }

    privateEat() {
        // How to make private?
    }
}

但是,没有一种好的方法可以使用这种基于类的新语法来创建私有(private)变量和函数。新的建议是将 exports 与以前的模块模式(公共(public)成员的闭包返回对象)一起使用吗?如果没有,我如何像第一个示例那样模拟私有(private)范围(希望没有下划线)?

最佳答案

I figure in ES6 we have classes now so something like this becomes the refactored code.

您的原始代码似乎代表了一个模块之类的东西。类不是模块,但 ES6 现在对模块有原生支持。所以你的代码应该更有可能变成

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

export {publicEat as eat};

并不是所有的东西都可以、已经或应该被建模为一个类。

关于javascript - 如何用 ES6 类模拟私有(private)作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324287/

相关文章:

javascript - 叠加 2x 图像 Blob

JavaScript 内部结构 : Where are the variables stored in-between compilation and execution phase ?

javascript - 是否有原因导致括号运算符 [] 可能无法在 React 组件中与 getElementsByClassName() 一起使用?

PHP 命名空间 - 声明具有相同名称的类

python - 列出给定类的层次结构中的所有基类?

java - 如何运行多模块maven应用程序?

javascript - 为什么这个脚本在页面加载后 3 秒没有动画(jquery)?

javascript - Vue.js:导入带有函数的类并在子组件中调用它

python - 何时或为什么在 Python 中使用相对导入

templates - 如何处理 Web 应用程序中的模块主题?