Nodejs怎么自动生成函数名?
发布于 9 年前 作者 ShookABeta 5944 次预览 最后一次回复是 9 年前 来自 问答
先放代码:
function func1() {
console.log('这是第一个函数');
}
function func2() {
console.log('这是第二个函数');
}
function func3() {
console.log('这是第三个函数');
}
function funcall(val) {
switch (val) {
case '1':
func1();
break;
case '2':
func2();
break;
case '3':
func3();
break;
default:
break;
}
}
funcall('1');
怎么写funcall函数实现自动调用函数呢?传的值和函数是有关系的,比如值1对应func1,值2对应func2,目前我只会用switch方式来手工一一对应,数量比较少的时候还可以,但是如果对应的数量多了写起来就很烦,请教各位怎么改写funcall最简单?
15 回复
思路: 1.用数组做map,凭借数组的游标定位引用到的function。 2.定义一个父对象,在对象里定义function。
一楼也是个思路,但是eval有安全性风险,不建议用。 二楼和我思路类似,额外做了类型检测,推荐。
@libook 二楼不就是你自己么。。。
@xcatliu 刚才刷我前面还有一个,后来就没了,估计是删帖了?
不建议用eval 可以用下面的方式 将那些function 赋值 给一个数组
Print 结果
我刚才写的,一个有问题我就删除了;这个是我测试过的;可以直接运行使用的; 我刚回复的,前面只有一个贴; 为了不误人子弟,我就测试验证了下
默认全局的写法 test 前面不能加 var let 和const 这个写法的本质是2楼的第二种方式 对象的属性可以写成数组这种方式调用
非常感谢各位,让我学到好几个方法,我开始问得比较简单,没描述清楚,用数组的方式还解决不了我的问题,所以最后我采用了2楼第2个方法。@libook @liujavamail @slclub
@xcatliu 哈哈 笑死了
来自酷炫的 CNodeMD
不太清楚你的具体需求是什么,如果是想做structs2 这样的中控的话 可以用配置+模块, 如果是像 根据参数调用某个函数的话
@dp199313 谢谢,我虽然已经用前面的办法解决了问题,不过又从你这儿学到些新东西!
其实。。以上的种种写法跟 switch 没有啥本质区别。。。无非就是怎样把 一个标识符与一个已有的 function 对应起来。 仅eval() 利用了 js的动态能力,稍稍不同。
为什么不用Reflection
@myy 嗯,用eval()确实最简单,但是大家都说不是很安全,我才学的js,不太懂,所以听大家的,先不用这个; @jiangzhuo 又学到一个办法:)