element-ui table 组件等一些数据组件自定义render,存数据库方法如何快速转解码

作者: tww844475003 分类: 前端开发 发布时间: 2023-07-22 18:26

在日常开发中,很多业务数据需求都是使用表格,列表去承载。开发人员首先想到的是制作各种公共组件。在开发中为了满足各种个性化自定义渲染,就会有这样的需求,把动态方法存到数据库,渲染时根据方法动态渲染数据。

这样问题来了,方法肯定不是直接往数据库里边存储,需要转成字符串,下次想改又要转回来,维护非常的麻烦。这就会想到要是有一个工具来做这个该多好呀。

源码下载预览

代码转String

const funStr = new Function('return ' + code)();
JSON.stringify(funStr.toString());

String转代码

eval(`var func = ${code}`);

new Function VS eval

  • new Function 语法
let func = new Function ([arg1, arg2, ...argN], functionBody);

new Function()只接受字符串参数,其可选参数为方法的入参,必填参数为方法体内容。

  • eval()

eval()具有可以解析表达式的特性,所以可以利用这一特性将字符串解析为一个函数。

  • 使用注意

如果是一个完整的函数体,且其中函数体内未包含其他函数,那么可以使用new Function或eval来实现。

如果函数体内包含函数,那么包含的函数必须和被调用的函数位于同一作用域下。

如何保证调用函数和调用参数在统一作用域?有2种方案可以采取:

将变量和方法都声明到window对象上,那么任何地方皆可以调用,但是这样存在风险,如果存在和window对象内置属性同名的情况下,将覆盖内置属性的值。
将变量和方法作用域一个实例对象中。

前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注