1

私はjQuery.comでjQueryチュートリアルを行っており、現在、extendメソッドを理解しようとしています。それはほとんど動作します。

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

2番目のKey-Valueペアはbanana:200である必要があります。なぜそうではないのか誰かが説明できますか?前もって感謝します。

4

5 に答える 5

1

バナナはオブジェクトポパティです。したがって、それを拡張すると、2番目に置き換えられます。priceただし、プロパティを更新する場合weightは、そのようにコーディングする必要があります

var obj = $.extend(true, object1, object2);
于 2013-03-24T10:10:33.937 に答える
0

オブジェクトバナナは次のようになります。

banana : {
  weight: 52,
  price: 200
}

$.extend上書きされていないキーは削除されません。それよりも賢いです。したがって、重量はまだ存在します。

表示される理由[object object]は、toString()メソッドalertがなく、バナナオブジェクトを文字列化する方法がわからないためです。値を単独でコンソールに出力すると、これが表示されます。

于 2013-03-24T10:02:46.370 に答える
0

警告ボックスには、ネストされたオブジェクトは表示されません。

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

console.log(myObj)ChromeまたはFirebugを使用している場合は、アラートの代わりにこの出力を簡単に確認できます。Windowsでを押してコンソールを表示する必要がありCtrl+Shift+Jます。

お役に立てれば!

于 2013-03-24T10:04:52.380 に答える
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]);}
于 2013-03-24T10:07:12.193 に答える
0

以下が役立つはずです:

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

// merge both objects
var obj = $.extend(object1, object2);
于 2013-03-24T10:16:16.967 に答える