【问题标题】:How to access function inside function without outer returning inner one如何在没有外部返回内部的情况下访问函数内部的函数
【发布时间】:2018-09-22 05:58:47
【问题描述】:

我有一个函数'alpha',里面还有另一个函数'beta'。如果我没有在 alpha 中返回 beta,那么如何访问 beta。反正有这样做吗? (比如,我可以访问 alpha 写入 window.alpha(),因为在全局上下文中 alpha 成为 window 对象的属性,那么如何通过 window dom 树访问 beta 作为属性)?

<html>
<head></head>
<body>

<script>

function alpha() { 
  console.log("hi");
  function beta() {
    console.log("hello");
  } 
} 
alpha(); //works 
window.alpha(); //works
beta(); //it is directly not accessible. How to access it if alpha does not return it

</script>

</body>
</html>

alpha() 在 Window Dom 中,但为什么不是 beta? (甚至不在 alpha 内部)

【问题讨论】:

    标签: javascript function scope window-object


    【解决方案1】:

    如果你不想返回beta,你可以返回this并将beta定义为this.beta

    要访问beta(),您只需拨打alpha().beta() .

    function alpha() {
      console.log("hi");
    
      this.beta = () => {
        console.log("hello");
      }
    
      return this;
    }
    
    alpha().beta();

    【讨论】:

      【解决方案2】:

      使用thisbeta 声明为alpha 的成员:

      function alpha() {
        console.log("hi");
      
        this.beta = function() {
          console.log("hello");
        }
      }
      
      let a = new alpha();
      a.beta();

      您当前的实现阻止 JavaScript 从 alpha 外部访问 beta。阅读更多关于 JavaScript 中的 private functions 的信息。

      使用this,您实际上可以将此类方法附加到函数alpha 的实例上。这就是我在这个解决方案中所做的。

      【讨论】:

        【解决方案3】:

        通常你不能做这件事,你可以更喜欢这些选项,但在这些选项中你必须调用alpha一次才能获得测试版

        //第一个选项

        (function alpha() { 
          console.log("hi");
          function beta() {
            console.log("hello");
          } 
          window.beta = beta;
        })() 
        

        //第二个选项

        使用this 创建beta 作为alpha 中的属性

        function alpha() {
          this.beta = function() {
            console.log("hello");
          }
        }
        let alphaObject = new alpha();
        alphaObject.beta();
        

        【讨论】:

          【解决方案4】:

          beta() 方法是函数 alpha 的私有方法。 Javascript 作用域的工作方式阻止您直接访问内部函数。使用 this.beta 将其创建为 alpha 的属性

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-23
            • 1970-01-01
            • 2017-06-01
            • 2019-10-12
            • 2014-05-27
            相关资源
            最近更新 更多