// 是否为promise
export function isPromise(obj) {
  return (
    !!obj && // 有实际含义的变量才执行方法，变量null，undefined和''空串都为false
        (typeof obj === 'object' || typeof obj === 'function') && // 初始promise 或 promise.then返回的
        typeof obj.then === 'function'
  );
}

export function deepMerge() {
  var extended = {};
  var deep = false;
  var i = 0;
  // 判断是否为深拷贝
  if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {
    deep = arguments[0];
    i++; // 如果为深拷贝则初始的i为1或者为0
  }
  // 将对象属性合并到已存在的对象中
  var merge = function(obj) {
    for (var prop in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // 如果属性为对象并且需要深拷贝时则使用函数递归、反之则将当前的属性替换现有的属性
        if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {
          extended[prop] = deepMerge(deep, extended[prop], obj[prop]);
        } else {
          extended[prop] = obj[prop];
        }
      }
    }
  };
  // 遍历所有对象属性
  for (; i < arguments.length; i++) {
    merge(arguments[i]);
  }
  return extended;
}
