new Function 得到的都是匿名函数,怎么得到一个具名函数对象?
创始人
2025-05-29 19:17:07

背景

Vue 支持动态组件编译,使用原生组件定义方式创建对象:

// 动态创建一个 Vue 组件
const MyComponent = Vue.component('componentId', {template: templateStr,data: eval(dataStr),methods: methodObj,}
);

这个 methods 怎么动态生成呢?

JS 的 new Function

方案:可以使用 new Function 创建一个函数,但是它是一个匿名函数,为了让 Vue 能够使用这些函数,必须创建对应的具名函数,怎么实现呢?

在匿名函数的方法体中,返回一个具名函数,然后再调用一次这个匿名函数。

例如,一个弹框组件,提供一个 onClose 方法,动态生成:

const closeFuncDef = 'function onClose() {\n' +'      this.isShow = false;\n' +'      this.close();\n' +'    },';

再定义一个 methods 对象,传入这个字符串配置创建的方法对象:

  // 定义一个匿名函数,它返回一个具名函数const anonymousFuncDef = new Function(`return ${closeFuncDef}`);// 调用这个匿名函数,得到那个具名函数对象const withNameFuncDef = anonymousFuncDef();// 设置这个函数属性的值为那个具名函数methods = {onClose: withNameFuncDef}

这样就能被 Vue 动态编译并使用了。

函数对象如何反序列化并解析

正向思路是 methods 函数属性都通过读取文件获取字符串后,再解析出来,那么问题来了,JSON.parse 没法解析函数对象,怎么办呢?

另外 Vue.component 方式创建组件,怎么传递自定义的样式,以及 mounted/created 挂载事件呢?能不能支持复杂组件的定义呢?

要支持定制化前端文件,还差一点。

相关内容

热门资讯

2025最新消息“顶级娱乐开挂... 您好,顶级娱乐这款游戏可以开挂的,确实是有挂的,通过微信【8198015 】很多玩家在这款游戏中打牌...
2025最新消息“好运互娱开挂... 您好,好运互娱这款游戏可以开挂的,确实是有挂的,通过微信【8198015 】很多玩家在这款游戏中打牌...
2025最新消息“点我棋牌开挂... 您好:点我棋牌这款游戏可以开挂,确实是有挂的,需要了解添加微信【29290261很多玩家在这款游戏中...
2025最新消息“丫丫棋牌开挂... 亲,丫丫棋牌这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总...
游戏攻略心得体会文章攒劲甘肃麻... 您好!欢迎拜访本公司网站,咱们公司是专业研制及出售全国各地辅助软件1.亲,实际上攒劲甘肃麻将确实有挂...