【问题标题】: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】:
使用this 将beta 声明为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 的属性