Ответ 1
V8 может выполнять вывод имени функции на этапе синтаксического анализа, раскрывая эту информацию через свои API. Вы не сможете извлечь эту информацию, используя обычные свойства объекта.
Я использую Chrome v22.0.1229.94 m, но это не важно, но на всякий случай: -)
Портативность меня не касается. Пока это работает с Chrome (и Safari), я счастлив.
У меня есть две функции: foo и bar:
var foo = function() {
...
}
function bar() {
...
}
тогда, если я создам объекты, используя их:
f1 = new foo();
b1 = new bar();
Я могу получить имя конструктора для bar, но не для foo:
> f1.constructor.name ==> ""
> b1.constructor.name ==> "bar"
но в обоих случаях консоль DevTools будет показывать имена "foo" и "bar" при проверке переменных f1 и b1.
Как извлечь имя foo для f1, поскольку DevTools может?
V8 может выполнять вывод имени функции на этапе синтаксического анализа, раскрывая эту информацию через свои API. Вы не сможете извлечь эту информацию, используя обычные свойства объекта.
В случае foo
вы создаете выражение функции. Это означает, что вы назначаете анонимную функцию переменной.
Вы не можете программным способом разрешить функцию name
, если только вы не дадите функции имени и не создадите "именованное функциональное выражение".
var foo = function foo() {
...
}