code: function extend(object, subject, ignoredKeys) {
      function copier(key, value) {
        if ( !ignoredKeys || !ignoredKeys.hasOwnProperty(key)) {    // no copy ignored keys
          object[key] = value;                                      // do copy
          if (iClass) { oPrototype[key] = value; }                  // class? copy to prototype as well
        }
      }
  
      if (isArray(subject)) {
        for (var len = subject.length; --len >= 0;) { extend(object, subject[len], ignoredKeys); }
      } else {
        ignoredKeys = ignoredKeys || { constructor: 1, $super: 1, prototype: 1, $superb: 1 };
  
        var iClass     = isClass(object),
            isSubClass = isClass(subject),
            oPrototype = object.prototype, supez, key, proto;
  
        // copy static properties and prototype.* to object
        if (isMap(subject)) { for (key in subject) copier(key, subject[key]); }
  
        if (isSubClass) {
          proto = subject.prototype;
          for (key in proto) { copier(key, proto[key]); }
        }
  
        // prototype properties
        if (iClass && isSubClass) { extend(oPrototype, subject.prototype, ignoredKeys); }
      }
    }
docs: Extend object from subject, ignore properties in ignoredKeys