Rozwiązanie to tworzy nowy obiekt i jest w stanie obsłużyć wiele obiektów .
Ponadto jest rekurencyjne i możesz wybrać pogodę chcesz do nadpisywania Wartości i obiektów.
function extendObjects() {
var newObject = {};
var overwriteValues = false;
var overwriteObjects = false;
for (var indexArgument = 0; indexArgument < arguments.length; indexArgument++) {
if (typeof arguments[indexArgument] !== 'object') {
if (arguments[indexArgument] == 'overwriteValues_True') {
overwriteValues = true;
} else if (arguments[indexArgument] == 'overwriteValues_False') {
overwriteValues = false;
} else if (arguments[indexArgument] == 'overwriteObjects_True') {
overwriteObjects = true;
} else if (arguments[indexArgument] == 'overwriteObjects_False') {
overwriteObjects = false;
}
} else {
extendObject(arguments[indexArgument], newObject, overwriteValues, overwriteObjects);
}
}
function extendObject(object, extendedObject, overwriteValues, overwriteObjects) {
for (var indexObject in object) {
if (typeof object[indexObject] === 'object') {
if (typeof extendedObject[indexObject] === "undefined" || overwriteObjects) {
extendedObject[indexObject] = object[indexObject];
}
extendObject(object[indexObject], extendedObject[indexObject], overwriteValues, overwriteObjects);
} else {
if (typeof extendedObject[indexObject] === "undefined" || overwriteValues) {
extendedObject[indexObject] = object[indexObject];
}
}
}
return extendedObject;
}
return newObject;
}
var object1 = { a : 1, b : 2, testArr : [888, { innArr : 1 }, 777 ], data : { e : 12, c : { lol : 1 }, rofl : { O : 3 } } };
var object2 = { a : 6, b : 9, data : { a : 17, b : 18, e : 13, rofl : { O : 99, copter : { mao : 1 } } }, hexa : { tetra : 66 } };
var object3 = { f : 13, g : 666, a : 333, data : { c : { xD : 45 } }, testArr : [888, { innArr : 3 }, 555 ] };
var newExtendedObject = extendObjects('overwriteValues_False', 'overwriteObjects_False', object1, object2, object3);
Zawartość newExtendedObject:
{"a":1,"b":2,"testArr":[888,{"innArr":1},777],"data":{"e":12,"c":{"lol":1,"xD":45},"rofl":{"O":3,"copter":{"mao":1}},"a":17,"b":18},"hexa":{"tetra":66},"f":13,"g":666}
Fiddle: http://jsfiddle.net/o0gb2umb/
wykorzystywać źródła, Luke :) – epoch
Jest strona, która naprawdę pomaga w kontroli źródła jQuery. Dla 'jQuery.extend', [tutaj] (http://james.padolsey.com/jquery/#v=git&fn=jQuery.extend). –
Przed pytaniem zwróciłem uwagę, ale istnieją zewnętrzne zależności od funkcji extend(), więc jest więcej pracy do zrobienia, niż skopiowanie kilku linii. – Borek