code: function listen(node, type, handler, isOnce) {
  
          var eid = this._EVNET_UID,
              targetObject = this;
  
          // 初始化内部监听器
          if (!INNER_HANDLER_CACHE[eid]) {
  
              INNER_HANDLER_CACHE[eid] = {};
  
          }
  
          if (!INNER_HANDLER_CACHE[eid][type]) {
  
              // 内部监听器
              INNER_HANDLER_CACHE[eid][type] = function kityEventHandler(e) {
  
                  e = new ShapeEvent(e || window.event);
  
                  Utils.each(USER_HANDLER_CACHE[eid][type], function executeKityEvent(fn) {
                      var result;
                      if (fn) {
  
                          result = fn.call(targetObject, e);
  
                          //once 绑定， 执行完后删除
                          if (isOnce) {
  
                              targetObject.off(type, fn);
  
                          }
  
                      }
  
                      // 如果用户handler里return了false， 则该节点上的此后的同类型事件将不再执行
                      return result;
  
                  }, targetObject);
  
              };
  
          }
  
          // 初始化用户监听器列表
          if (!USER_HANDLER_CACHE[eid]) {
  
              USER_HANDLER_CACHE[eid] = {};
  
          }
  
          if (!USER_HANDLER_CACHE[eid][type]) {
  
              USER_HANDLER_CACHE[eid][type] = [handler];
  
              // 绑定对应类型的事件
              // dom对象利用dom event进行处理， 非dom对象， 由消息分发机制处理
              if (!!node && ('on' + type) in node) {
                  bindDomEvent(node, type, INNER_HANDLER_CACHE[eid][type]);
  
              }
  
          } else {
  
              USER_HANDLER_CACHE[eid][type].push(handler);
  
          }
  
      }
docs: 执行绑定, 该方法context为shape或者mixin了eventhandler的对象