本文介绍在JavaScript类中保存外部函数引用的方法。通过判断arguments长度,区分无参函数与带参函数,构建函数调用字符串并保存至类变量。使用时通过eval或类似机制执行该字符串,实现动态调用外部函数的功能,适用于需要灵活绑定回调的场景。
JavaScript类中保存外部函数名及带参调用的实现技巧
例如,我们需要在一个类中定义一个方法,该方法能够接收另一个函数并将其保存到类的变量中。当后续需要时,可以通过访问这个类变量来重新获取并执行该函数。
通常情况下,当我们创建一个类的实例时,
例如:var temp=new TopnetTree();
如果我们尝试通过设置属性的方式来传入一个函数,会发现直接赋值得到的是函数的执行结果或内容,而不是函数本身的引用或名称,这通常不是我们想要的行为。
例如temp.fileAction=fnTest; //fnTest是一个函数
因此,我编写了一个特定的方法来实现这一功能。
该方法利用arguments对象来判断传入内容的类型和数量:
具体实现的功能逻辑如下:
如果传入的参数数量为0,则不执行任何操作。
如果只传入了一个参数,则将其视为一个无参数的函数名。
如果传入了多个参数,则第一个参数被视为函数名,后续的参数作为该函数的调用参数。
具体代码实现如下:
1 TopnetTree.prototype.setFileAction=function(){
2 var fnName,fnArgs="";
3 if(arguments.length==0){
4 return 0;
5 }else if(arguments.length==1){
6 fnName=arguments[0];
7 }else{
8 fnName=arguments[0];
9 for(var i=1;i<arguments.length;i++){
10 fnArgs+=","+arguments[i];
11 }
12 fnArgs=fnArgs.replace(",","");
13 }
14
15 this.fileAction=fnName+"("+fnArgs+")";
16 }