Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中访问window.App函数 问题_Javascript_Html - Fatal编程技术网

在Javascript中访问window.App函数 问题

在Javascript中访问window.App函数 问题,javascript,html,Javascript,Html,我有一个预先制作的js文件(我不完全理解),正在导入到我的html页面。这个js文件定义了一个我希望能够通过html页面本身中的脚本块调用的函数 我想调用的函数是app.openNav。我尝试过使用各种不同的方法调用此函数(window.App.App.openNav,App.App.openNav,App.openNav,App.openNav,甚至window.openNav),但都没有成功 我没有通过这些方法调用函数,这让我觉得也许我需要在顶级函数之外定义它(使它全局化?)。我试着说app

我有一个预先制作的js文件(我不完全理解),正在导入到我的html页面。这个js文件定义了一个我希望能够通过html页面本身中的脚本块调用的函数

我想调用的函数是
app.openNav
。我尝试过使用各种不同的方法调用此函数(
window.App.App.openNav
App.App.openNav
App.openNav
App.openNav
,甚至
window.openNav
),但都没有成功

我没有通过这些方法调用函数,这让我觉得也许我需要在顶级函数之外定义它(使它全局化?)。我试着说
app.openNav={}但这也不起作用

这在nav.js中:

(功能(窗口、文档、未定义)
{
window.App=(函数()
{    
var-app={};
app.init=函数()
{
app.openNav=函数()
{
//开放式导航
};
//用按钮打开导航
document.getElementById('foo').addEventListener('click',app.openNav,false);
};
返回应用程序;
})();
if(window.addEventListener){
window.addEventListener('DOMContentLoaded',window.App.init,false);
}
})(窗口,窗口,文件);
如您所见,我目前有一种方法,通过在html对象上使用
addEventListener
从nav.js内部调用
app.openNav
。但是,我使用一个外部库()来解释我想要用来打开导航的事件

问题 是否可以从nav.js外部调用
app.openNav
函数?

如果是这样的话,我该怎么做呢?

根据您的代码,可以通过
App.openNav
访问它


实时演示:(等待2秒,警报才会显示。)

应用程序实际上是应用程序的私有程序-对分配给应用程序的对象的任何方法调用都需要通过应用程序完成-应该注意的是,在您的示例中,您已经硬编码了“foo”的id,因此,确保在init中添加事件侦听器时,确实有一个将被选中的元素-在控制台中运行代码并调用App.init()以查看它将显示什么do@kinakuta
app===app
。它们是同一个对象。@kinakuta
app
从其函数返回,该函数立即被调用,返回值分配给
window.app
。因此,
window.App
引用
App
对象。查看我的演示。@kinakuta OP想知道如何从其他脚本访问
app.openNav
函数。因为,
app
被分配给了
app
,所以可以通过
app.openNav
访问该功能。这回答了OP的问题。您在最初的评论中没有提到这个解决方案,所以我认为您不理解这个问题。@kinakuta您没有看到
app
app
完全相同。它们是同一个物体。本地
app
名称只是在构造对象时出于方便而使用。(顺便说一句,jQuery在代码中也做同样的事情)。因此,
app
是否“不在范围内”在这里是无关紧要的(而且是误导性的,IMO)。此模式应该使用的was是,方法在
app
上定义,然后在
app
上调用。