Если же необходимо что-то клонировать, то функцию можно переписать так:
function extend() {
var target = arguments[0]
, i = 1;
for (; i < arguments.length; ++i) {
var options = arguments[i];
for (var name in options) {
if (options.hasOwnProperty(name)) {
var src = options[name];
if (src == target) { // избегаем ухода в вечную рекурсию
continue;
}
if (isObject(src)) { // src != null && typeof src == 'object'
var dst = new src.constructor();
src = arguments.callee(dst, src);
}
target[name] = src;
}
}
}
return target;
}