JavaScript 一直被诟病缺少私有变量,而在 ES6 中,我们可以通过闭包实现模拟私有变量,但这样做的性能和可读性都不是很好。在 ES9 中,JavaScript 引入了词法私有变量的概念,使得我们可以在类中方便地定义私有变量。
什么是词法私有变量?
词法私有变量是指只能在类中访问的变量,外部无法访问。这里的“词法”指的是变量的作用域是在类的定义中,而不是在类的实例中。
如何使用词法私有变量?
在 ES9 中,我们可以使用 #
符号来定义私有变量。下面是一个示例:
-- -------------------- ---- ------- ----- ------ - ------ ----------------- - ---------- - ----- - --------- - ------ ----------- - ------------- - ---------- - ----- - - ----- ------ - --- ------------- ------------------------------ -- ----- --------------------- ------------------------------ -- ----- -------------------------- -- --------------- ------- ----- ------- ---- -- -------- -- -- --------- -----
在上面的示例中,我们定义了一个 Person
类,其中使用 #
符号定义了一个私有变量 #name
。在类的构造函数中,我们可以通过 this.#name
来给私有变量赋值。在类的方法中,我们可以通过 this.#name
来访问私有变量。注意,外部无法访问私有变量 #name
,否则会报错。
词法私有变量的优点
使用词法私有变量有以下几个优点:
更好的封装性
使用词法私有变量可以更好地封装类的内部实现,避免外部直接访问私有变量,从而提高代码的可维护性和可读性。
更好的性能
使用词法私有变量可以避免使用闭包模拟私有变量时的性能问题,因为词法私有变量是在类定义时就确定的,而不需要在每个实例中重新创建闭包。
词法私有变量的注意事项
使用词法私有变量时,需要注意以下几点:
严格模式
词法私有变量需要在严格模式下才能使用。
命名冲突
私有变量的命名不能与类的公有属性或方法重复,否则会报错。
无法继承
私有变量无法被继承,子类中无法访问父类的私有变量。
总结
ES9 中的词法私有变量为 JavaScript 引入了更好的封装性和更好的性能,使得我们可以方便地定义类中的私有变量。但需要注意的是,词法私有变量需要在严格模式下才能使用,命名不能与类的公有属性或方法重复,且无法被继承。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/657c0188d2f5e1655d6bb78a