2012-02-26 44 views
0

我在对象中有一个对象。它看起来像这样。对象内的对象使用JavaScript添加属性

var myLib = { 
    object1: {} 
} 

我的基本问题是,我想最终这样。所以我想动态地做到这一点,直到运行时才会知道属性或附加对象。

var myLib = { 
    object1: ({"A1":({"Color":"Blue", 
         "height":50}) 
    }) 
} 

从阅读这里堆栈溢出 我知道,我可以通过简单地去这样创建一个对象中的对象:

myLib.Object1["A1"] = "Something" 

但这并不生产什么我要找的。

我试过这个语法,我知道错了,但基本上

mylib.Object1["A1"].["color"]="Blue"; 

所以基本上这里是个问题。我想在“mylib.Object”下创建对象“A1”,并立即将属性color =“blue”添加到“A1”。我需要为其他几个属性做这件事,但如果我能弄清楚如何做到这一点,我可以解决其余的问题。我怎样才能完成这项任务?

请不要jQuery。只是简单的旧JavaScript是我正在寻找。**

一旦我创建对象和属性,我会想象我可以使用for循环来循环通过该对象的属性。像这样:

for(key in mylib.Object1["A1"]){} 

对不对?

+2

它是'[“A1”] [“color”] =“蓝色”'你在追求什么? – pimvdb 2012-02-26 17:00:02

+0

似乎是它的,但如果我尝试这个我得到一个错误myLib.Object1 [“A1”] [“color”] =“蓝色”;错误是myLib.Object1“A1”未定义。 – Miguel 2012-02-26 17:05:56

回答

4

您可以从头开始创建这一切是这样的:

var myLib = {}; 
myLib.object1 = {}; 

// assuming you get this value from your code somewhere 
var x = "A1"; 

myLib.object1[x] = {Color: "Blue", height: 50}; 

或者,如果所有值都在变量:

var myLib = {}; 
myLib.object1 = {}; 

// assuming you get this value from your code somewhere 
var x = "A1"; 

var colorProp = "Color"; 
var colorPropValue = "Blue"; 
var heightProp = "height"; 
var heightPropValue = 50; 
myLib.object1[x] = {}; // create empty object so we can then add properties to it 
myLib.object1[x][colorProp] = colorPropValue; // add one property 
myLib.object1[x][heightProp] = heightPropValue; // add another property 

这些语法创建相同的结果:

myLib.object1.A1 = {}; 

var x = "A1"; 
myLib.object1[x] = {}; 

第一个只能在编写代码时知道属性名称以及属性名称为fol时使用低估了JavaScript标识符的适当规则。第二种可以随时使用,但通常在属性名称位于变量中或者它不遵循JavaScript标识符的规则时使用(例如,它以数字开头)。

+0

绝对天才谢谢花时间向我解释这一点。这真棒。我有一个概念和语法问题,你解决了他们两个。谢谢你,先生! – Miguel 2012-02-26 17:17:25