123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
-
- var getProto = Object.getPrototypeOf || function (obj) {
-
- return obj.__proto__;
- };
- var hasOwn = Object.prototype.hasOwnProperty;
- var fnToString = hasOwn.toString;
- var ObjectFunctionString = fnToString.call(Object);
-
-
- var isPlainObject = function(obj) {
- var proto, Ctor;
-
-
-
- if (!obj || toString.call(obj) !== "[object Object]") {
- return false;
- }
-
- proto = getProto(obj);
-
-
- if (!proto) {
- return true;
- }
-
-
- Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
- return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
- };
-
-
- var isFunction = function (val) {
- return (typeof val === 'function');
- }
-
-
- var extend = function () {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
-
- if (typeof target === "boolean") {
- deep = target;
-
-
- target = arguments[i] || {};
- i++;
- }
-
-
- if (typeof target !== "object" && !isFunction(target)) {
- target = {};
- }
-
-
- if (i === length) {
- target = this;
- i--;
- }
-
- for (; i < length; i++) {
-
-
- if ((options = arguments[i]) != null) {
-
-
- for (name in options) {
- src = target[name];
- copy = options[name];
-
-
- if (target === copy) {
- continue;
- }
-
-
- if (deep && copy && (isPlainObject(copy) ||
- (copyIsArray = Array.isArray(copy)))) {
-
- if (copyIsArray) {
- copyIsArray = false;
- clone = src && Array.isArray(src) ? src : [];
-
- } else {
- clone = src && isPlainObject(src) ? src : {};
- }
-
-
- target[name] = extend(deep, clone, copy);
-
-
- } else if (copy !== undefined) {
- target[name] = copy;
- }
- }
- }
- }
-
-
- return target;
- };
-
- module.exports = {
- extend: extend
- }
|