这是我的主要文件:
$(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
我做错了什么?
答案 0 :(得分:3)
您的问题是在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文件的正确用法。
希望这有帮助
答案 1 :(得分:1)
您需要使用window.Page = new Page();
。
答案 2 :(得分:1)
函数定义不需要在document.ready()
函数内。只有在准备好DOM时才需要立即执行的操作需要放在那里。所以将功能移到顶层。
答案 3 :(得分: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的脚本都必须包含在此之后。