2009-12-03 54 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個變量然後附加測試反對。