code: function (aNode, sourceBuffer, owner, extra) {
          extra = extra || {};
          var compileMethod = 'compileElement';
  
          if (aNode.textExpr) {
              compileMethod = 'compileText';
          }
          else if (aNode.directives['if']) { // eslint-disable-line dot-notation
              compileMethod = 'compileIf';
          }
          else if (aNode.directives['for']) { // eslint-disable-line dot-notation
              compileMethod = 'compileFor';
          }
          else if (aNode.tagName === 'slot') {
              compileMethod = 'compileSlot';
          }
          else if (aNode.tagName === 'template') {
              compileMethod = 'compileTemplate';
          }
          else {
              var ComponentType = owner.getComponentType
                  ? owner.getComponentType(aNode)
                  : owner.components[aNode.tagName];
  
              if (ComponentType) {
                  compileMethod = 'compileComponent';
                  extra.ComponentClass = ComponentType;
  
                  if (ComponentType instanceof ComponentLoader) {
                      compileMethod = 'compileComponentLoader';
                  }
              }
          }
  
          aNodeCompiler[compileMethod](aNode, sourceBuffer, owner, extra);
      }
docs: 编译节点
  
  @param {ANode} aNode 抽象节点
  @param {CompileSourceBuffer} sourceBuffer 编译源码的中间buffer
  @param {Component} owner 所属组件实例环境
  @param {Object} extra 编译所需的一些额外信息