3

这是我的主文件:

$(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

我究竟做错了什么?

4

4 回答 4

4

您的问题是,在 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);
    });

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

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

希望这可以帮助

于 2013-01-15T07:41:32.820 回答
1

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

于 2013-01-15T07:27:27.667 回答
1

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

于 2013-01-15T07:27:57.340 回答
0

任何一个

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

于 2013-01-15T07:36:01.150 回答