定义对象和设置对象有什么区别';javascript中的属性

定义对象和设置对象有什么区别';javascript中的属性,javascript,Javascript,我正在创建一个小库,并在JS中使其面向对象,在我发送的对象没有得到正确处理之前,一切都很顺利。 如果我这样做: var foo = {}; foo.bar = barbar; //barbar is a variable foo.bar2 = barbar2 //barbar2 is also a variable //more stuff var foo = { bar : barbar, 'bar2': barbar2 /*more stuff*/ } 但是,如果我这样做,对象将起作用:

我正在创建一个小库,并在JS中使其面向对象,在我发送的对象没有得到正确处理之前,一切都很顺利。 如果我这样做:

var foo = {};
foo.bar = barbar; //barbar is a variable
foo.bar2 = barbar2 //barbar2 is also a variable
//more stuff
var foo = { bar : barbar, 'bar2': barbar2 /*more stuff*/ }
但是,如果我这样做,对象将起作用:

var foo = {};
foo.bar = barbar; //barbar is a variable
foo.bar2 = barbar2 //barbar2 is also a variable
//more stuff
var foo = { bar : barbar, 'bar2': barbar2 /*more stuff*/ }
库无法正确识别该对象

我发现这就是我在调试了3个小时后出现奇怪错误的原因,我仍然不相信这是原因。 有人知道为什么会这样吗?我需要在将来动态创建对象,我更喜欢第二种方法

编辑:

我使用该对象将要在画布中绘制的内容的信息传递给另一个函数,例如:

var test = {};//
test.init_x = 0; // all this works no matter what method I use to set them
test.init_y = 0;
test.sourceFile = 'img/tiles.png';
test.tileWidth = 16;
test.tileHeight = 16; //still works
test.arrayTiles = array; // this is a very large array of numbers
// The above only works if its defined this way, i.e. not by test = {arrayTiles:array};
示例代码,这是我创建对象的步骤:

var test = {}
test.init_x = 0;
test.init_y = 0;
test.sourceFile = 'img/map/grid_tiles.png';
test.tileWidth = 16;
test.tileHeight = 16;
test.tile_offset_x = 1;
test.tile_offset_y = 1;
test.sourceTileCounts = 4096;
test.sourceTileAccross = 64;
test.tilesWide = 64;
test.tilesHigh = 64;
test.tilesArray = [];//large numbers array
test.physicsArray = phys;
test.zoneTilesWide = 8;
test.zoneTilesHigh = 8;
test.mapTiles = [];//large numbers array
test.decoration = [];//large numbers array
test.tilesArray = makeMapTilesArray(test.mapTiles, test.decoration);
上面的代码段确实有效,但下一个代码段无效:

function Map(map,tiles,decor,phys,tileSizeW,tileSizeH,totalTiles,tilesPerRow,tilesW,tilesH,zoneW,zoneH){//map
    this.mapTiles           = tiles;
    this.decoration         = decor;
    this.tilesArray         = [];
    this.physicsArray       = phys;
    this.canvas             = 0;
    this.ctx                = 0;
    this.init_x             = 0;
    this.init_y             = 0;
    this.sourceFile         = 'img/map/'+map+'.png';
    this.tileWidth          = tileSizeW;
    this.tileHeight         = tileSizeH;
    this.tile_offset_x      = 1;
    this.tile_ofset_y       = 1;
    this.sourceTileCounts   = totalTiles;
    this.sourceTileAcross   = tilesPerRow;
    this.tilesWide          = tilesW;
    this.tilesHigh          = tilesH;
    this.zoneTilesWide      = zoneW;
    this.zoneTilesHigh      = zoneH;
    this.tilesArray = makeMapTilesArray(tiles, decor);//this function does some byte shifting
}
var test = new Map('grid_tiles',mapTiles,decoration,physicsArray,16,16,4096,64,64,64,8,8);

为什么它不起作用?图书馆能做些什么使这两者不相等?

请提供更多详细信息。什么是“更多的东西”?你说“无法正确识别对象”是什么意思?如果定义了
barbar
barbar2
,那么这两种方法都可以正常工作,因此肯定还有其他一些东西没有显示给我们。此外,请注意术语。您定义的是一个对象,而不是数组。@RayToal只是简单地添加了更多属性定义,由于无法识别该对象,嗯,这有点复杂,我会马上更新我的帖子。您遇到了什么错误?此外,您应该为所有对象使用一个通用标准,而不是您在var foo={bar:barbar,'bar2':barbarbar2/*more stuff*/}@nyanko中所做的操作。您可以发布一个完整的代码示例吗<代码>变量foo={bar:[1,2,3]}是完全有效的。同样地,
varfoo=[1,2,3],bar={foo:foo}是有效的。在本例中,您将拥有一个对象
bar
,其中
bar.foo
[1,2,3]