Свертывание собственного Расширение / Mixin Функция
function extend(objects) {
var args
, first = Array.prototype.slice.call(arguments, 0, 1)[0]
, second;
if (arguments.length > 1) {
second = Array.prototype.splice.call(arguments, 1, 1)[0];
for (var key in second) {
first[key] = second[key];
}
args = Array.prototype.slice.call(arguments, 0);
return extend.apply(this, args);
}
return first;
}
...
var briansDirections = {
step1: 'Remove pastry from wrapper.',
step2: 'Place pastry toaster.',
step3: 'Remove pastry from toaster and enjoy.',
};
extend(briansDirections, { step1: 'Toast Poptarts' }, { step2: 'Go ahead, toast \'em' }, { step3: 'Hey, are you sill reading this???' });
...
Это просто расширяет знак объектов, рекурсивно. Также обратите внимание, что эта рекурсивная функция имеет TCO ( Tail-Call Optimized ), поскольку ее возвращение является последним вызовом для себя.
Кроме того, вы можете захотеть целевых свойств . В этом случае вы можете сжать объекты на основе id
, quantity
или другого свойства. Этот подход может иметь небольшую книгу, написанную об этом и требует сопоставления объектов и может быть очень сложным. Я написал для этого небольшую библиотеку, доступную по запросу.
Надеюсь, это поможет!