从其他JS文件访问全局变量



这是我的主文件:

$(document).ready(function () {
  function Page() {
    this.menu = new Menu();
    this.management = new Management();
    this.text = "text";
  }
window.Page= Page();
});

现在我想从每个其他JS文件访问页面:

我试过了:

console.log(Page.text);

给出:Uncaught ReferenceError: Page is not defined

尝试:

console.log(window.Page.text);

给我:Uncaught TypeError: Cannot read property 'text' of undefined

我做错了什么?

您的问题是,在Page函数中,您没有在全局上下文中创建任何新对象。您正在创建一个新的菜单和新的管理实例,但在当前上下文中。

通过调用Window。Page = Page(),您正在将Page函数的结果(这是void)分配给窗口。页面对象。

我建议你这样做:

//- from any js file 
    function createPage() {
            var newPage = { title : 'new page', count : '2' };
            return newPage;
          }
    window.Page = createPage();

//- and from other js file
    $(document).ready(function () {                
    alert(window.Page.title);
    });

注意,我已经用这个示例中的虚拟内容替换了您的菜单和管理属性。示例@ this JSFiddle

更新:代码已更新,以说明多个js文件的正确使用。

希望能有所帮助

函数定义不需要在document.ready()函数内部。只有在DOM准备好后需要立即执行的操作才需要放在那里。所以把函数移到顶层

您需要使用window.Page = new Page();

或者

window.Page = new Page();

function Page(){
   this.menu = new Menu();
   this.management = new Management();
   this.text = "text";
   return this;
}
window.Page = Page();

然后确保其他脚本不会尝试使用window。在声明之前的页面。您可以在document.ready()回调函数中声明它,因此只有在DOM准备好并触发回调函数后才能访问它。

编辑:

没有上下文我不确定这正是你想要做的,但我认为你只需要一个全局Page对象与一些属性/方法。最简单的创建方法是

window.Page = {
    menu : new Menu(),
    management = new Management(),
    text = "text"
};
没有document.ready()包装的

。显然,MenuManagement需要在执行这段代码之前定义。如果这些函数中的任何一个依赖于DOM,只需将所有脚本移到文档的末尾。需要访问窗口的任何脚本。

相关内容

  • 没有找到相关文章

最新更新