Run this code : var empty = {}; var defaults = { validate: false, limit: 5, name: "foo", buttons : {}}; var options = { validate: true, name: "bar"}; var settings = $.extend(empty, defaults, options);
settings.buttons['Ok'] = function() { alert( "TEST"); }; After running this settings.buttons contains ["Ok"] as expected BUT so does defaults.buttons. I only set settings.buttons["Ok']. Somehow extend() causes this behaviour can anyone explain why?