JavaScript动态调用方法名的两种实现方式

作者:木棉时间:2026-10-27 19:58:46浏览:408

本文介绍在JavaScript中动态调用方法名的两种常见实现方式。第一种利用eval()函数直接执行拼接后的字符串代码,虽然灵活但存在安全风险;第二种通过定义包含方法引用的对象,利用对象属性访问特性实现动态调用,结构更清晰且易于维护。

首先展示一个JavaScript函数的基本示例。



eval函数基础用法

介绍JavaScript中的eval()函数。


定义和用法说明。



eval()函数的主要功能是计算传入的字符串参数,并执行其中包含的JavaScript代码。


语法格式如下。



eval(string)



参数描述说明。



string为必需参数,代表需要被计算和执行的字符串,其中应包含合法的JavaScript表达式或语句。



返回值说明。



返回通过计算string参数所得到的值(如果存在返回值)。



注意事项说明。



该函数仅接受原始字符串作为参数。若传入的参数不是原始字符串,函数将不做任何处理直接返回原值。因此,不建议将String对象作为参数传递给eval()函数。



根据ECMAScript标准,如果尝试覆盖eval属性或将eval()方法赋值给其他属性并通过该属性调用,实现可能会抛出EvalError异常。



异常抛出情况。



当参数中不包含合法的表达式或语句时,将抛出SyntaxError异常。



若以非法方式调用eval(),将抛出EvalError异常。



如果传递给eval()的JavaScript代码在执行过程中产生异常,eval()会将该异常传递给调用者。



提示和注释。



尽管eval()功能强大,但在实际开发中的应用场景并不多见。



实例演示。



示例1。



本例演示在多个字符串上应用eval()函数,并观察返回结果。


代码如下:

 
<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
var x=10
document.write(eval(x+17))
</script>

输出结果:



200


4


27



示例2。



查看在其他情况下eval()的返回结果。


代码如下:

 
eval("2+3") // 返回 5
var myeval = eval; // 可能会抛出 EvalError 异常
myeval("2+3"); // 可能会抛出 EvalError 异常

可以使用以下代码检测eval()的参数是否合法:


代码如下:

 
try {
alert("Result:" + eval(prompt("Enter an expression:","")));
} 
catch(exception) {
alert(exception);
} 

动态调用方法实现方案

第一种实现方式是直接使用JavaScript内置的eval函数。



以下是作者编写的示例代码。


代码如下:

 
call("showmsg");
function call(functionName){
eval("this."+functionName+"()");
} 
function showmsg(){
alert("success");
} 

eval能将拼接后的字符串自动识别为方法并执行调用。



但其弊端显著,若有人修改调用处的方法名字符串,即可调用任意方法,存在安全隐患。



第二种实现方式主要用于自定义方法的动态调用。



该方法需要采用特定的编写结构。


代码如下:

 
function call(functionName) {
showmsgs["showmsg"]();
} 
var showmsgs = { showmsg: function () {
alert("success");
} 
} 
call("showmsg");
作者最新文章