我正在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]);
警告框提供以下输出:
第二个键值对应为banana:200。有人可以解释为什么不是吗?提前谢谢。
答案 0 :(得分:1)
香蕉是一种物体属性。因此,如果你延长它,它将被第二个替换。但是,如果您要更新price
和weight
属性,则必须使用此类代码
var obj = $.extend(true, object1, object2);
答案 1 :(得分:0)
香蕉的对象将是:
banana : {
weight: 52,
price: 200
}
$.extend
不会删除未被覆盖的密钥,它比那更聪明。所以体重仍然存在。
它显示[object object]
的原因是因为没有toString()
方法且alert
不知道如何对香蕉对象进行字符串化。如果您将这些值自己打印到控制台,这就是您将看到的内容。
答案 2 :(得分:0)
警告框不会显示嵌套对象。
//Use this on your object before you alert
alert(JSON.stringify(myObj));
如果您使用Chrome或Firebug,则可以使用console.log(myObj)
而非警报轻松查看此输出。您需要在Windows中按Ctrl+Shift+J
来查看控制台。
希望这有帮助!
答案 3 :(得分: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]);}
答案 4 :(得分:0)
以下应该有所帮助:
// override banana with its price
object2.banana = object2.banana.price
// merge both objects
var obj = $.extend(object1, object2);