2010-10-04 5 views
17

Можно ли как-то установить имя для анонимных функций?Именование анонимной функции

Нет необходимости добавлять имена функций в пространство имен для анонимных функций, но я бы хотел избежать большого количества (?) В моем отладчике javascript, чтобы я мог поддерживать трассировку стека вызовов информативной.

Также я могу безопасно передавать обычные объявленные функции в качестве аргументов вместо анонимных функций, или я буду входить в некоторые странные ошибки. Кажется, это работает.

$("object").bind("click", function() { alert("x"); }); 

$("object").bind("click", function debuggingName() { alert("x"); }); 

[Редактировать]

Я имел в виду что-то вдоль подобного

$("object").bind("click", function() { Function.Name = "debuggingName"; alert("x"); }); 
+4

@Raynos - поименованный анонимная функция есть противоречие в терминах !! – InSane

+0

Вы получаете некоторую ошибку, когда используете вторую конструкцию выше? –

+0

Я просто хочу установить что-то в анонимной функции, которую отладчик может отображать и отображать как полезное имя функции отладки. Я хочу использовать их точно так же, как использовать анонимные функции. – Raynos

ответ

17

Вашего второй пример использование имя функция выражения, который отлично работает в большинстве браузеров, но имеют некоторые проблемы в IE, что вы должны знать, прежде чем использовать его. Рекомендую прочитать kangax's excellent article on this subject. .

+0

Спасибо, я был обеспокоен тем, что передача имени функции может вызвать ошибки. – Raynos

+0

О, это прекрасная статья. Я не заметил, что было какое-то различие между именованными выражениями функций и объявлением функции. – Raynos

+0

Да, я просто писал комментарий, указывающий на то, что вне :) –

-3

Анонимная функцией является функцией без имени, она выполняется из которых она определена. В качестве альтернативы вы можете определить функцию отладки перед ее использованием.

function debuggingName() { 
    alert("x"); 
} 

$("object").bind("click", debuggingName); 
0

Если динамическая имя функции является проблемой. Вы можете попробовать это:

function renameFunction(name, fn) { 
    return (new Function("return function (call) { return function " + name + 
     "() { return call(this, arguments) }; };")())(Function.apply.bind(fn)); 
} 

renameFunction('dynamicName',function() { debugger })(); 

источник: Nate Ферреро в How to dynamically set a function/object name in Javascript as it is displayed in Chrome

+1

Я только что видел лучшее решение для этого на http://stackoverflow.com/questions/5871040/how-to-dynamically-set-a-function-object-name-in-javascript-as-it-is- display-i –

+0

Никогда не делайте этого. Это глупо и многословно. –

Смежные вопросы