1、Js中打印function的代码:
function f() {} // 输出"function f() {}" console.debug(f.toString());
2、指定名称动态调用function
function f() {} // 指定名称调用f eval('f();');
特别注意eval执行的上下文:
function f(v) { console.debug(v); } var value = 'global'; function action() { var value = 'local'; // 打印'local' eval('f(value)'); // 打印'value' eval('f("value")'); }
eval中传递参数较为麻烦,且易出错。
3、考虑Js对象操作"."号和"[]"的作用
我们可以通过"[]"动态指定属性名获取对象中的属性,且认为所有的function及对象均是window对象的属性(定义在window作用域中),我们动态调用f方法如下:
// f(); 等效于 window.f(); var fname = 'f'; window[fname](args...);
如此我们即可动态调用f,并根据需要传递参数;
思考:若f不是定义在window下当如何,var obj = { f : function() {} } // 函数名即为"obj.f"
var obj = { f : function(value) { console.debug(value); } } var fname = "obj.f"; // Error:window[fname](); // Ok: window['obj']['f']();