/** * Pilot * @author Tevin */ export class Pilot { constructor() { } $data() { return {}; } createOptions(dataAdd) { const options = { methods: {}, }; const names = []; // 实例本身的字段 Object.getOwnPropertyNames(this).forEach(name => names.push(name)); // 类的字段 Object.getOwnPropertyNames(Object.getPrototypeOf(this)).forEach(name => names.push(name)); // 传递 names.forEach(name => { // 构造器忽略,如果存在属性 $methods 也忽略 if (name === 'constructor' || name === '$methods') { return; } if (/^\$/.test(name)) { if (name === '$data' && typeof dataAdd !== 'undefined') { // 当有传data值进来,初始值必须带data中的字段 const dataOrig = this.$data(); options.data = () => { return { ...dataOrig, ...dataAdd, } } } else { options[name.replace('$', '')] = this[name]; } } else { options.methods[name] = this[name]; } }); return options; } }