javascript中对象内部的对象

javascript中对象内部的对象,javascript,object,nested,javascript-objects,Javascript,Object,Nested,Javascript Objects,我对Javascript有点陌生,所以这可能只是一个noob错误,但我还没有发现任何特别有助于我环顾四周的东西。我正在写一个游戏,我正在尝试为暂停菜单创建一个对象 为了便于组织,我想做的一件事是让菜单上的按钮成为pause_菜单对象中的对象。我最终将向这些对象添加事件处理程序,我也希望在pause_菜单对象中这样做。一些按钮还没有完全编码,但我想在继续之前至少让一些东西工作起来 我正在使用Raphael.jsv1.5.2来渲染这些形状。Raphael的东西适用于接口的其余部分,但其代码看起来不像

我对Javascript有点陌生,所以这可能只是一个noob错误,但我还没有发现任何特别有助于我环顾四周的东西。我正在写一个游戏,我正在尝试为暂停菜单创建一个对象

为了便于组织,我想做的一件事是让菜单上的按钮成为pause_菜单对象中的对象。我最终将向这些对象添加事件处理程序,我也希望在pause_菜单对象中这样做。一些按钮还没有完全编码,但我想在继续之前至少让一些东西工作起来

我正在使用Raphael.jsv1.5.2来渲染这些形状。Raphael的东西适用于接口的其余部分,但其代码看起来不像这样令人愉快,因此类似的东西对我来说更可取

我当前的问题是,当我执行var pause_menu=new pause_menu()时,实际上没有任何渲染

这是我到目前为止为暂停菜单编写的代码:

//Pause Menu Object:
function pause_menu() {

    function pause_button() {
        this.button = game.rect(0, 350, 150, 50, 5);
        this.text =  game.text(75, 375, 'PAUSE');
    }
    function resume_button() {
        this.button;
        this.text;
    }
    function quit_button() {
        this.button;
        this.text;
    }
    this.pause_button = new pause_button(); //the button that the user presses to pause the game (I want an event handler on this to trigger .show() method for presently hidden menu items)
    this.resume_button = new resume_button();
    this.quit_button = new quit_button();
    this.box = game.rect(150, 50, 400, 300, 5).hide(); //the box that surrounds the menu when it appears
}
var pause_menu = new pause_menu();
好的,下面是解决方案(使用事件处理程序):

然后:


等等。

只要将一个对象声明为另一个父对象的属性,就可以拥有任意多个层次的对象层次结构。注意每个级别上的逗号,这是棘手的部分。不要在每个级别的最后一个元素后使用逗号:

{el1,el2,{el31,el32,el33},{el41,el42}

var MainObj={
prop1:“prop1MainObj”,
Obj1:{
prop1:“prop1Obj1”,
prop2:“prop2Obj1”,
Obj2:{
prop1:“嘿,你”,
prop2:“prop2Obj2”
}
},
Obj3:{
prop1:“prop1Obj3”,
prop2:“prop2Obj3”
},
Obj4:{
prop1:没错,
prop2:3
}  
};

console.log(MainObj.Obj1.Obj2.prop1)这不是JSON。它们只是对象文字。常见错误。这和兰斯的答案结合起来解决了问题,谢谢你们!看起来你需要创建一个渲染游戏的render()方法。rect()实例?我建议你看看这个。如果没有剩下的代码,我不确定问题出在哪里,但是要注意,当你执行
var pause_menu=new pause_menu()时,你正在覆盖你的
pause_menu
函数在与函数相同的变量范围内。感谢patrick,在实际游戏中
var pause_menu=new pause_menu()与函数不在同一范围内。它是否因为变量名与函数名相同而覆盖?在javascript中,尾随逗号是可以的。从es5开始,它就出现在ecma脚本规范中(我甚至认为一直到es3)。但IE8及以下版本并不尊重这一点,因此他们会在遇到“悬垂逗号”时出错。总而言之,在最后一个元素的末尾使用逗号是非常好的。事实上,现在人们通常更喜欢它。@thechad为什么在对象的最后一个元素上使用traling逗号更可取?@Aónio这两种方式都没什么大不了的。在我看来,能够添加新的键值,而不必记住在手之前添加逗号,这是很好的。(后面的逗号可以,但忘记用逗号分隔确实是一个错误)。说它通常是“首选”可能是一种过于强烈的说法,也许“常规”可能更准确。“首选”听起来比实际情况更重要……”JSON中的尾随逗号。对象中的尾随逗号仅在ECMAScript 5中引入。由于JSON基于ES5之前的JavaScript语法,所以JSON中不允许尾随逗号“刚刚找到了这个解释,我的评论是针对这篇特定的帖子,作者使用的是对象文本,而不是JSON。只是想弄清楚that@thechad我想说,出于教学方面的原因,我们不应该让读者感到困惑。尾随逗号是“可以接受的”,但可能会导致混淆,就像您在JSON中所说的那样,甚至会导致数组
var arr=[1,2,]
var pause_menu = {

    pause_button: { button : game.rect(0, 350, 150, 50, 5).click(function (event){
                       pause_menu.menu_box.show();
                  }), text : game.text(75, 375, 'PAUSE') },
    menu_box: game.rect(150, 50, 400, 300, 5).hide(),
    resume_button: {},
    quit_button: {}

};
var pause_menu = {
    pause_button : { someProperty : "prop1", someOther : "prop2" },
    resume_button : { resumeProp : "prop", resumeProp2 : false },
    quit_button : false
};
pause_menu.pause_button.someProperty //evaluates to "prop1"