繁体   English   中英

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

[英]Accessing global variable from other JS file

这是我的主要文件:

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

现在我想从其他所有JS文件访问Page:

我试过这个:

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函数的结果(无效)分配给window.Page对象。

我建议你这样做:

//- 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);
    });

请注意,我已将此菜单和管理属性替换为此示例的虚拟内容。 样本@ 这个JSFiddle可用

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

希望这可以帮助

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

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

window.Page = new Page();

要么

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

然后确保其他脚本在声明之前不尝试使用window.Page。 你在document.ready()回调函数中声明它,所以只有在DOM准备好并且回调函数被触发后才能访问它。

编辑:

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

window.Page = {
    menu : new Menu(),
    management = new Management(),
    text = "text"
};

没有document.ready()包装器。 现在显然需要在执行此代码之前定义MenuManagement 如果这些函数中的任何一个依赖于DOM,只需将所有脚本移动到文档的末尾即可。 任何需要访问window.Page的脚本都必须包含在此脚本之后。

暂无
暂无

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

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