代码之家  ›  专栏  ›  技术社区  ›  The KNVB

浏览器javascript类(而不是node.js)中私有方法的语法是什么?[复制品]

  •  0
  • The KNVB  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我知道这个问题已经被问过很多次了,但是大多数问题要么是针对node.js解决方案,要么在浏览器中不起作用。

    那么,是否可以在浏览器javascript类中实现私有方法?

        <html>
        <body>
            <script>
                class Happy
                {
                    constructor()
                    {
                    }
                    _leo()
                    {
                        console.log("ff");
                    }
                }       
                var h=new Happy();
                h._leo();
            </script>
        </body>
    </html> 
    

    但是,上面的代码仍然在控制台中输出“FF”,我如何修复它?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Amadan    7 年前

    这说明了如何隐藏方法名,有效地使方法在隐藏闭包之外不可压缩:

    const Klass = (function() {
      const privName = Symbol("priv");
    
      class Klass {
        publ() {
          console.log("in publ");
          this[privName]();
        }
        [privName]() {
          console.log("in priv");
        }
      }
    
      return Klass;
    })()
    
    let inst = new Klass();
    inst.publ();
    // => in publ
    //    in priv
    

    它使用的事实是 Symbol() 返回无法复制的实体,事实是 privName 在闭包之外的任何地方都不会公开,我们可以使用方括号表示法定义具有计算名称的属性。

    与超蟾蜍演示的函数隐藏机制不同,这不仅仅是一个辅助函数,而是一个真正的方法。注意,你不能用点符号来称呼它——点符号只有在你知道名字的时候才起作用,在这里,除了 私名 .