2013-04-04 2 views
1

Я хотел бы написать программу, которая присоединяет имя функции для #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); 

В этом мало проверка концепции, что я брошена вместе, я знаю, что я Вероятно, я ошибаюсь.

Но вот суть моего вопроса:

Q: Как вы называете функцию так, что она может быть интроспекции?

+0

Что 'introspected'? – jfriend00

+0

Почему бы вам просто не использовать отладчик? Вы можете получить имя функции с помощью 'arguments.callee', но оно будет постепенно прекращено (не будет работать в строгом режиме, возможно, не будет работать в будущих версиях ECMAScript). – bfavaretto

+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"); 
Смежные вопросы