docs: function onReady() {
    const self = this;
  
    /***
     * 判断页面是否已经ready
     */
    if (this.hasInited) return;
    this.hasInited = true;
  
    /***
     * window.document.body的jQuery
     */
    this.bodyDOM = window.document.body;
  
    /***
     * 存放完全单例对象的容器
     */
    this.singleInstances = null;
  
    /***
     * 创建page切换时的遮罩层
     */
    this.maskDOM = $(
      "<div class='ct-page-mask'>" +
      " <div opt='animation' class='la-ball-circus la-dark' style='color:#3e98f0;'>" +
      "   <div></div>" +
      "   <div></div>" +
      "   <div></div>" +
      "   <div></div>" +
      "   <div></div>" +
      " </div>" +
      "</div>")[0];
    this.bodyDOM.appendChild(this.maskDOM);
  
    fireEvent(window.document, "pageBeforeChange", [CtMobileFactory.getUrlParam(window.location.hash)]);
    /***
     * 初始化第一页
     * TODO:初始化第一页
     */
    createPage.call(this, this.getFirstId(), (Component) => {
      Component.start(0, () => {
          /***
           * if(有hash值) 加载的不是首页而是某一个指定的页面 {
           *   调用startPage即可
           *   startPage需要三部分值
           *   1.html的路径
           *   2.pageId
           *   3.parameter
           * }
           */
          const hash = window.location.hash;
          if (!hash) return false;
  
          const pageId = self.getPageIdByHash();
          if (!pageId) return false;
  
          const url = `#${pageId}`;
          const parameter = self.getParameterByHash();
          const searchObj = CtMobileFactory.getUrlParam(`${url}${parameter}`);
  
          self.startPage(`${url}${parameter}${parameter ? (searchObj.pageId ? '' : `&pageId=${pageId}`) : `?pageId=${pageId}`}`, {
            reload: self.config.linkCaptureReload
          });
        }
      );
    });
  
  }