繁体   English   中英

如何在不外部返回内部的情况下访问内部函数

[英]How to access function inside function without outer returning inner one

我有一个函数“ alpha”,里面还有另一个函数“ beta”。 如果我不返回alpha测试版,那么如何访问beta。 反正有这样做吗? (就像,我可以访问alpha编写window.alpha(),因为在全局上下文中alpha成为窗口对象的属性,然后如何通过窗口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内)

在此处输入图片说明

通常,您不能执行此操作,或者您更喜欢这些选项,但是在这些操作中,您必须调用一次alpha才能获得beta

//第一个选项

(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();

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

要访问beta() ,您只需要调用alpha().beta()

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

beta()方法专用于功能alpha。 Javascript范围定义的工作方式可防止您直接访问内部函数。 使用this.beta其创建为alpha的属性

使用this beta声明为alpha成员:

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

您当前的实现阻止JavaScript从alpha之外访问beta 阅读有关JavaScript中私有函数的更多信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM