js反射

伪代码:
class Test {
func1(param_obj) {}
func2(param_obj) {}
netmsg(func_name_string, param_ojb) {
//TODO: 这里有没有通过类似反射的办法来直接映射好 而不是一个一个IF去判断
if (func_name_string === 'func1")
this.func1(param_obj);
elseif (func_name_string === ‘func2’)
this.func2(param_ojb);
}
}
求教。

this[func_name_string] && this[func_name_string] (param_ojb);
:joy:应该有比这个更好的方法…

这个办法不错 比写IF好

改良版:this[func_name_string]?. (param_ojb);

这种就没必要了吧 多写一句话的事 老实说写过不少的编程语言 还第1次看到"?."这种语法的

哈哈,这个是短路语,不成立直接返回

?.文档

:wink:
哈哈 还是不要这个了 直接加个错误提示了

或许还应该typeof判断一下是否是Function?

确实需要判断一下

image

?.这种写法引擎支持了吗?我现在用2.3.4版本的,之前使用??这种写法,vscode编译过了,但是引擎编译不过导致打不开项目。

俩?是什么,有文档吗?

?.是TS的语法啊,肯定支持啊

是这个啊

是的 类似于 let a= param.some?param.some:val;两个?的话就可以直接写let a=param.a.b??val。它会依次判断,类似于if(param&&param.a&&param.a.b){}

image

哈哈,TS版本问题吗?我VSCode编译不过~

微信截图_20210322155519
我这边可以 :laughing:

const 的问题吧?常量怎么会摸棱两可

image
不是哦,那位兄弟引擎编译不过应该跟我VSCode一样,可能是TS版本问题。不过2.4.4和3.0我测试了一下,编译报错,运行不报错~
线索:2.4.4升级了引擎TS版本