你如何命名一个函数,以便你可以内省它?

时间:2013-04-04 18:24:18

标签: javascript

我想编写一个例程,只要它被调用,就会将函数的名称附加到#trace:

;(function($, window, undefined) {
    var dom = {};
    var myObject = {};
    myObject.myFunction = {
        trace('myObject.myFunction');
        // function logic goes here
    }

    dom.trace = $('#trace');
    var trace = function(value) {
        dom.trace.append(value + '<br>'));
    }

    $(document).on('click','#Save',myObject.myFunction)
})(jQuery, window);

在这个我被抛在一起的小概念证明中,我知道我可能做错了12件事。

但这是我的问题所在:

问:你如何命名一个函数以便可以反省它?

1 个答案:

答案 0 :(得分:0)

来自http://www.learnjquery.org/tutorials/

function show_props(a,b,c,d,e)
{
   var msg = "function name = " + arguments.callee.name + "\n";
   msg += "called from = " + show_props.caller.name + "\n";
   msg += "arguments.length = " + arguments.length + " argument(s) were passed.\n"
   msg += "show_props.length (arity) = " + show_props.length + " argument(s) are defined total.\n";
   msg += "arguments = " + arguments +  "\n";
   for (var i = 0; i < arguments.length; i++)
       msg += "arguments[" + i + "] = " + arguments[i] + "\n";

   msg += "And arguments.callee.toString() is the function's literal body in string format = \n" + arguments.callee.toString() + "\n";

   alert(msg);
}

function parent()
{
   show_props(1,2,3);
}

parent();

The result is shown below:

function name = show_props
called from = parent
arguments.length = 3 argument(s) were passed.
show_props.length (arity) = 5 argument(s) are defined total.
arguments = [object Arguments]
arguments[0] = 1
arguments[1] = 2
arguments[2] = 3
And arguments.callee.toString() is the function's literal body in string format = 
function show_props(a,b,c,d,e)
{
   var msg = "function name = " + arguments.callee.name + "\n";
   msg += "called from = " + show_props.caller.name + "\n";
   msg += "arguments.length = " + arguments.length + " argument(s) were passed.\n"
   msg += "show_props.length (arity) = " + show_props.length + " argument(s) are defined total.\n";
   msg += "arguments = " + arguments +  "\n";
   for (var i = 0; i < arguments.length; i++)
       msg += "arguments[" + i + "] = " + arguments[i] + "\n";

   msg += "And arguments.callee.toString() is the function's literal body in string format = \n" + arguments.callee.toString() + "\n";

   alert("msg");