function extend() {
var target = arguments[0]
, i = 1
, deep = false;
if (typeof target == 'boolean') {
deep = target;
target = arguments[1];
i = 2;
}
for (; i < arguments.length; ++i) {
var options = arguments[i];
for (var name in options) {
if (options.hasOwnProperty(name)) {
var copy = options[name];
if (copy === undefined || copy == target) {
continue;
}
// if (deep && copy != null && typeof copy == 'object') {
if (deep && isObject(copy)) {f
var dst = new copy.constructor();
copy = arguments.callee(deep, dst, copy);
}
target[name] = copy;
}
}
}
return target;
}