2013-03-24 93 views
1

我正在jQuery.com上做一些jQuery教程,並嘗試瞭解現在的擴展方法。它幾乎可以工作。jquery:擴展與兩個對象的方法 - 結果是對象對象?

var object1 = { 
       apple: 0, 
       banana: {weight: 52, price: 100}, 
       cherry: 97 
       }; 

      var object2 = { 
       banana: {price: 200}, 
       durian: 100 
       }; 

      var obj = $.extend(object1, object2); 

      for(var key in obj) { 
       alert('key: ' + key + '\n' + 'value: ' + obj[key]); 

警報框給出以下輸出:

  • 鍵:蘋果值:0
  • 鍵:香蕉值:[對象的對象]
  • 鍵:櫻桃值:97
  • 鍵:榴蓮值:100

第二個鍵 - 值對應該是b阿納納:200。有人可以解釋爲什麼它不是?提前致謝。

回答

0

警告框根本不顯示嵌套的對象。

//Use this on your object before you alert 
alert(JSON.stringify(myObj)); 

如果您使用Chrome或螢火蟲,你可以很容易地看到使用console.log(myObj)代替警報此輸出。您需要在Windows中按Ctrl+Shift+J來查看控制檯。

希望這會有所幫助!

+0

謝謝。只需要找出我剛纔做的:) – user2174851 2013-03-24 10:19:06

+0

不客氣:) – saada 2013-03-24 10:23:45

0

對象香蕉將是:

banana : { 
    weight: 52, 
    price: 200 
} 

$.extend將不刪除未覆蓋的鑰匙,這是比聰明。所以體重仍然存在。

它顯示[object object]的原因是因爲沒有toString()方法而alert不知道如何對banana對象進行Stringify。如果你將自己的值打印到控制檯上,這是你將看到的。

+0

我不是肯定還沒有我做什麼,但是我用了代碼ElGamed建議,它的工作。但實際上香蕉重量不在警戒框內,只是價格200. – user2174851 2013-03-24 10:18:39

0

它顯示你的對象,因爲它是對象,它不深入潛水。

您可以輕鬆地添加此測試:

object2.banana.toString=function(){ return this["price"]; //only for object2's banana. just for demonstrating. 

完整代碼:http://jsbin.com/esobuc/2/edit

var object1 = { 
       apple: 0, 
       banana: {weight: 52, price: 100}, 
       cherry: 97 
       }; 

      var object2 = { 
       banana: {price: 200}, 
       durian: 100 
       }; 

object2.banana.toString=function(){ return this["price"]; 
} 

      var obj = $.extend(object1, object2); 

      for(var key in obj) { 
       alert('key: ' + key + '\n' + 'value: ' + obj[key]);} 
1

的bannana是一個對象poperty。所以如果你擴展它,它將被第二個替代。但是,如果你想更新priceweight性能,你必須編寫這樣的

var obj = $.extend(true, object1, object2); 
0

以下應該有所幫助:

// override banana with its price 
object2.banana = object2.banana.price 

// merge both objects 
var obj = $.extend(object1, object2);