const isObject = obj => Object.prototype.toString(obj) === '[object Object]';
  const isArray = array => Array.isArray(array);

  let human = {
    name: 'kodo',
    age: 18,
    work1: ['web', 'student'],
    hobby: {
      game: ['sc2', 'dota2']
    }
  };
  function deepClone(target) {

    if (target === null || typeof target !== "object") {
      return target;
    }

    let newTarget = isArray(target) ? [] : {};

    for ( let key in target ) {
      if (target.hasOwnProperty(key)) {
        let value = target[key];

        if (value === target) {
          continue;
        }

        if (isObject(value) || isArray(value)) {
          newTarget[key] = deepClone(value)
        } else {
          newTarget[key] = value;
        }
      }
    }

    return newTarget;
  }


  var a = deepClone(human);
  //	console.log(a);
  a.name = 'sc222';
  console.log(human, '---human---');
  console.log(a, '---a---');