| 573 | |
| 574 | // An internal function for creating assigner functions. |
| 575 | function createAssigner(keysFunc, defaults) { |
| 576 | return function(obj) { |
| 577 | var length = arguments.length; |
| 578 | if (defaults) obj = Object(obj); |
| 579 | if (length < 2 || obj == null) return obj; |
| 580 | for (var index = 1; index < length; index++) { |
| 581 | var source = arguments[index], |
| 582 | keys = keysFunc(source), |
| 583 | l = keys.length; |
| 584 | for (var i = 0; i < l; i++) { |
| 585 | var key = keys[i]; |
| 586 | if (!defaults || obj[key] === void 0) obj[key] = source[key]; |
| 587 | } |
| 588 | } |
| 589 | return obj; |
| 590 | }; |
| 591 | } |
| 592 | |
| 593 | // Extend a given object with all the properties in passed-in object(s). |
| 594 | var extend = createAssigner(allKeys); |