如何在 JS 类中定义私有方法

Mau*_*.io 6 javascript private-methods

我正在尝试为一个类定义一个私有方法来测试不能从类外部调用这样的方法。但是,即使我使用规范中指示的语法,我也会遇到错误。我还检查了 MDN。

这是我班级的代码:

class CoffeeMachine {
  #waterLimit = 200;

  #checkWater(value) {
    if (value < 0) throw new Error("Negative water");
    if (value > this.#waterLimit) throw new Error("Too much water");
  }
}

const coffeeMachine = new CoffeeMachine;

coffeeMachine.#checkWater();
Run Code Online (Sandbox Code Playgroud)

在调用 时coffeeMachine.#checkWater();,我应该得到一个错误,表明不能从类外部调用这样的方法,但相反,我得到了Uncaught SyntaxError: Unexpected token '('.

这可能是什么原因?

小智 7

在 Javascript 中,您需要声明私有变量 私有变量是通过在它们前面添加“#”来声明的(如我的示例所示)。确保在构造函数之外声明它们

    class foo {
        #bar;// declare private variable called bar

        constructor() {
            this.#bar = "foobar";//define private variable called"bar"
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 2

我认为私有方法 ( #myMethod()) 和字段 ( #myField) 是实验性功能 [来源:developer.mozilar.org ],处于第 3 阶段供考虑,但我设法通过将其定义为字段并为其分配一个函数来使其工作,如下所示;

#checkWater = (value) => {
  if (value < 0) throw new Error("Negative water");
  if (value > this.#waterLimit) throw new Error("Too much water");
}
Run Code Online (Sandbox Code Playgroud)

或者

#checkWater = function(value) {
  if (value < 0) throw new Error("Negative water");
  if (value > this.#waterLimit) throw new Error("Too much water");
}
Run Code Online (Sandbox Code Playgroud)

现在在实例对象上调用它

coffeeMachine.#checkWater();
Run Code Online (Sandbox Code Playgroud)

让我赶紧补充一点,这段代码可以在 Google Chrome (第一张图片)中运行,但在 FireFox (第二张图片)中测试时,它没有运行。

在此输入图像描述

在此输入图像描述

希望你应该没问题!