本文介绍在JavaScript类中保存外部函数引用并动态调用的技巧。通过判断arguments长度,区分无参和有参函数,构建函数调用字符串。该方法解决了直接赋值函数内容而非函数名的问题,实现了灵活的方法绑定与执行。
JavaScript类中保存外部函数名及参数并动态调用的实现
例如,我们需要在类中定义一个方法,该方法能够接收另一个函数并将其保存在类的变量中,以便后续通过访问该变量来执行。
通常情况下,当我们创建类的实例时,
例如:var temp=new TopnetTree();
如果尝试通过设置属性的方式传入一个函数,会发现传入的是函数的具体实现内容,而不是函数的名称引用。
例如temp.fileAction=fnTest; //fnTest是一个函数
因此,我编写了一个方法来实现此功能。
该方法利用arguments对象来判断传入内容的类型:
具体实现的功能如下:
当传入参数为空时,不执行任何操作
当传入一个参数时,表示这是一个无参数的函数
当传入多个参数时,表示第一个参数是函数名,后续参数为各个函数的参数。
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 }