2009-12-03 53 views
0

我想知道是否有可能做这样的事情:的Javascript数据结构

if (mb == null || typeof (mb) != "object") { 
    var mb = new Object(); 
} 


mb = { 
    tests: { 
     onAnimals: { 
      test: function() { 
       return ""; 
      } 
     } 
     onHumans: { 
      test: function() { 
       return ""; 
      } 
     } 
    } 
} 

卜当我尝试它,我可以看到测试,但是当我进一步点,我不能se onAnimals/onHumans。

JavaScript对我来说还是新手,所以希望你能帮上忙。

回答

7

您在onHumans之前缺少逗号。我假定MB是一个全局变量;如果这是你需要的,你可以使用var。

window.mb = window.mb || {}; 
window.mb = { 
    tests: { 
    onAnimals: { 
     test: function(){ 
     return ""; 
     } 
    }, 
    onHumans: { 
     test: function(){ 
     return ""; 
     } 
    } 
    } 
}; 
+1

顶线有什么用?您将在第二行重新分配window.mb,这完全否定了顶行,除非我错过了某些内容。 – Chris 2009-12-21 07:41:51

+0

你是对的;它只是OP代码的复制。通常情况下,我会使用第一行,再加上Object.extend(window.mb,{..def ...}),但是没有描述使用什么库(如果有的话)。 – jvenema 2009-12-21 14:27:08

1

您的代码大多是有效的,你甚至不用做初步如果检查:另外,如果你构建不同的看法,这样更容易阅读。只需键入var mb = { ...,你会开始集mb到一个新的对象,无论它是一个之前,或不确定的,还是其他什么东西......

什么你缺少的是onAnimals声明寿后一个逗号:

mb = { 
    tests: { 
     onAnimals: { 
      test: function() { 
       return ""; 
      } 
     }, 
     onHumans: { 
      test: function() { 
       return ""; 
      } 
     } 
    } 
} 
1

你不需要事先声明变量为对象,简单地使用括号一样,是你所需要的。你确实有一个语法错误,在“onHumans”之前缺少逗号,但除此之外,它对我来说看起来不错。您应该能够通过mb.tests.onAnimals.testmb.tests.onHumans.test

2

你缺少一个逗号之前onHumans

if (mb == null || typeof (mb) != "object") { 
    var mb = new Object(); 
} 

mb = { 
    tests: { 
     onAnimals: { 
      test: function() { 
       return "animal"; 
      } 
     }, 
     onHumans: { 
      test: function() { 
       return "human"; 
      } 
     } 
    } 
} 

alert(mb); //[object Object] 
alert(mb.tests); //[object Object] 
alert(mb.tests.onAnimals); //[object Object] 
alert(mb.tests.onHumans); //[object Object] 
alert(mb.tests.onAnimals.test()); //animal 
alert(mb.tests.onHumans.test()); //human 
1

达到的功能在一些上面测试的量MB的存在的评论说是多余的,当你只是重新声明它来追加你的方法和属性。

如果您正在测试是否存在向该对象添加其他方法的变量,则应该使用像jQuery的extend或ExtJs的apply方法这样的方法。

的jQuery:

window.mb = $.extend(window.mb||{}, { 
    tests: { 
     onAnimals: { 
      test: function() { 
       return ""; 
      } 
     }, 
     onHumans: { 
      test: function() { 
       return ""; 
     } 
    } 
}); 

分机:

window.mb = Ext.apply(window.mb||{}, { 
    tests: { 
     onAnimals: { 
      test: function() { 
       return ""; 
      } 
     }, 
     onHumans: { 
      test: function() { 
       return ""; 
     } 
    } 
}); 

的代码将或者附加该代码段的测试对象对现有的mb个变量或创建的mb个变量然后附加测试反对。