code: function generateMethods(doc, text){
  	let code = `oFn               = ${doc.methods}`;
  	let ast;
  	try{
  		ast = acorn.parse(code, {ecmaVersion: 10, sourceType: 'module', locations: false} );
  	}catch(e){
  		// 通常是代码有语法错误
  		let start = doc.posMethods + e.pos - 20;
  		throw new Err('syntax error in [methods]', doc.file, {text, start}, e);
  	}
  
  	let map = new Map();
  
  	let properties = ast.body[0].expression.right.properties;
  	properties && properties.forEach(node => {
  		if ( node.value.type == 'ArrowFunctionExpression' ) {
  			map.set(node.key.name, 'this.' + node.key.name + '=' + astring.generate(node.value))
  		}else if ( node.value.type == 'FunctionExpression' ) {
  			// 为了让this安全的指向当前组件对象，把普通函数转换为箭头函数，同时也可避免写那无聊的bind(this)
  			let arrNode = node.value;
  			arrNode.type = 'ArrowFunctionExpression';
  			map.set(node.key.name, 'this.' + node.key.name + '=' + astring.generate(arrNode))
  		}
  	});
  
  	let names = [...map.keys()];
  	names.sort();
  
  	let rs = {src:'', names: names};
  	names.forEach(k => rs.src += (map.get(k)+'\n'));
  	return rs;
  }
docs: 把对象形式汇总的方法转换成组件对象的一个个方法，同时都直接改成箭头函数（即使function也不确认this，让this指向组件对象）