code: function updateHistory(model, notify) {
      return function update({ pathname }, action) {
          let state = model.state,
              histories = model.histories,
              callback = notify,
              method = action,
              idx;
  
  
          // 忽略同一跳转
          if (pathname === model.pathname) {
              return model.state = null;
          }
  
          // 处理状态
          if (state && state.pathname === pathname && state.action === action) {
              method = state.method || action;
              callback = state.next || notify;
          } else {
              idx = histories.lastIndexOf(pathname);
              method = action = idx > -1 ? actionTypes.pop : actionTypes.push;
          }
  
          // 更新路由记录
          switch (action) {
              case actionTypes.push:
                  histories = histories.concat([pathname]);
                  break;
              case actionTypes.replace:
                  histories = histories.slice(0, -1).concat([pathname]);
                  break;
              case actionTypes.pop:
                  histories = histories.slice(0, Math.max(0, (idx || histories.lastIndexOf(pathname)) + 1));
                  break;
              default:
                  break;
          }
  
          // 更新数据模型
          model.pathname = pathname;
          model.method = method;
          model.histories = histories;
          model.state = null;
  
          // 执行更新回调
          return callback({
              pathname, method, histories, length: histories.length
          });
      };
  }
docs: ****************************************
  获取历史对象信息
  ****************************************