作者回复: 好问题,它们和闭包是不同的。闭包主要利用的是内层函数对外层函数内变量的访问。symbol主要是利用了唯一值的特点,实现私有属性。 而用weakmap,可以对属性存储,避免了用this对属性的获取。并且和map相比,它只能用对象作为键名,键值会随着对象销毁。这样可以避免不同对象用同一个map时之间相互的影响;以及对象销毁了后,map依然存在的问题。
作者回复: 可以参考MDN里介绍的“私有静态方法”:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Classes/Private_class_fields class ClassWithPrivateStaticMethod { static #privateStaticMethod() { return 42; } static publicStaticMethod1() { return ClassWithPrivateStaticMethod.#privateStaticMethod(); } static publicStaticMethod2() { return this.#privateStaticMethod(); } } console.log(ClassWithPrivateStaticMethod.publicStaticMethod1() === 42); // true console.log(ClassWithPrivateStaticMethod.publicStaticMethod2() === 42); // true