index.js
 1  'use strict';
 2  
 3  var isObject = require('is-extendable');
 4  
 5  module.exports = function extend(o/*, objects*/) {
 6    if (!isObject(o)) { o = {}; }
 7  
 8    var len = arguments.length;
 9    for (var i = 1; i < len; i++) {
10      var obj = arguments[i];
11  
12      if (isObject(obj)) {
13        assign(o, obj);
14      }
15    }
16    return o;
17  };
18  
19  function assign(a, b) {
20    for (var key in b) {
21      if (hasOwn(b, key)) {
22        a[key] = b[key];
23      }
24    }
25  }
26  
27  /**
28   * Returns true if the given `key` is an own property of `obj`.
29   */
30  
31  function hasOwn(obj, key) {
32    return Object.prototype.hasOwnProperty.call(obj, key);
33  }