javascript - ES6如何在类中创建私有(private)变量和方法?

标签 javascript oop variables methods ecmascript-6

如何使用 ES6 类创建私有(private)变量和方法,这些变量和方法应该由同一类的公共(public)方法访问。

class MyClass {
    constructor() {
        this.publicVar = "I am public";
        //some private Variable e.g privteVar1 = "I am Private1"; privateVar2 = "I am Private2";
        this.publicMethod = () => {
         //it should have accesses to private variables and methods
           console.log(privateVar1, privateVar2)
        }; 
        //similarly need to create some privateMethod           
    }

    render() {
         //it also should have access to the private variables
    }

}

最佳答案

正如@yibuyisheng 所注意到的,您可以使用符号来创建对属性的不可访问引用。您也可以创建私有(private)方法。

var privateMethod = Symbol('private');

class SomeClass {
  constructor() {
  }

  [privateMethod]() {
    // some private actions
  }

  render() {
    // call private method
    this[privateMethod]()
  }
}

符号创建一个唯一的引用,它可以用作属性名称。并且这个属性或方法只能通过使用它来调用。这是可能的,因为 ES6 正在引入 computed properties syntax并且您可以使用变量进行动态属性定义。

如果您不向其他人公开此符号,则只有您可以调用它。

关于javascript - ES6如何在类中创建私有(private)变量和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551023/

相关文章:

javascript - 无法从 javascript 访问 ViewBag(有一个 JSON 对象列表)

javascript - 带有特殊字符的AngularJS表达式

c++ - 为什么我们将对象而不是对象成员传递给函数?

sql - 在 SQLite 中声明变量并使用它

python - 在 Python 中操作变量

javascript - 隐藏弹出点击任何地方

javascript - 页面滚动时,圆形鼠标跟随正在移动

ios - 委托(delegate)方法如何在 Swift 中工作?

oop - 为什么维基百科说 "Polymorphism is not the same as method overloading or method overriding."

c++ - 性能 : Reference vs. 值作为函数参数