javascript 开发调试的利器(二) 获取当前执行函数及函数名称


通过arguments.callee对象获取函数的字面量

function fun_name (num){
	var tmp = arguments.callee.toString();
	alert(tmp);
}
fun_name();


获得了我们定义函数的字面量,然后通过toSring()方法转换到字符串再通过正则把函数名匹配出来,即可
function fun_name (num){
	var tmp = arguments.callee.toString();
	var re = /function\s*(\w*)/i;
	var matches = re.exec(tmp);
	alert(matches[1]);
}
fun_name();

函数名正确找出来了。


但如果是这样定义函数的就没办法找出来了
var fun_name = function (){
	var tmp = arguments.callee.toString();
	alert(tmp);
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取 JavaScript 函数名称和代码,可以使用 `ScriptEngine` 接口提供的 `get` 方法和 `Invocable` 接口提供的 `getFunction` 方法。以下是一个示例代码片段,演示了如何使用 ScriptEngine 获取 JavaScript 函数名称和代码: ```java import javax.script.*; public class ScriptEngineExample { public static void main(String[] args) throws Exception { // 创建一个 JavaScript 引擎 ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); // 定义一个 JavaScript 函数 String script = "function add(a, b) { return a + b; }"; // 执行 JavaScript 代码 engine.eval(script); // 获取 JavaScript 函数名称和代码 Invocable invocable = (Invocable) engine; String functionName = null; String functionCode = null; for (String name : engine.getBindings(ScriptContext.ENGINE_SCOPE).keySet()) { Object obj = engine.get(name); if (obj instanceof Function) { functionName = name; functionCode = invocable.getFunction(name).toString(); break; } } // 输出 JavaScript 函数名称和代码 System.out.println("Function name: " + functionName); System.out.println("Function code: " + functionCode); } } ``` 在这个示例中,我们创建了一个 JavaScript 引擎,并定义了一个名为 `add` 的 JavaScript 函数。然后,我们使用 `ScriptEngine` 接口提供的 `getBindings()` 方法获取 JavaScript 引擎中的所有绑定变量,并遍历这些变量,查找 JavaScript 函数。一旦找到了 JavaScript 函数,我们就可以使用 `Invocable` 接口提供的 `getFunction()` 方法获取函数名称和代码。 需要注意的是,在不知道 JavaScript 函数名称的情况下,需要遍历 JavaScript 引擎中的所有绑定变量,查找 JavaScript 函数。这种方式可能会导致性能问题,特别是在 JavaScript 引擎中有大量绑定变量的情况下。因此,在实际应用中,最好在 JavaScript 函数被定义时就将其名称保存在一个变量中,以便在需要时快速获取函数名称和代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值