2014-11-08 3 views
1

Причина, по которой я хочу сделать это, довольно сложная, но длинная история короткая, вы можете сделать window[myString]=function hello(){}. Есть ли способ сделать var hello=function [myString](){}?Есть ли способ динамически дать анонимной функции имя в javascript?


Причина, по которой я хочу сделать это, потому что я создаю генератор классов в javascript. Проблема в том, что я могу назвать только переменную, которую я назначил конструктору, я не могу назвать сам класс. Поэтому, если создать экземпляр экземпляров моего сгенерированного класса, хром-dev-инструменты не знают, что такое экземпляр, поэтому он вызывает объект (анонимную функцию) вместо его имени класса. Это действительно измельчает мои шестерни.

Вот пример того, что я пытаюсь сделать. Скопируйте и вставьте в Дев инструментов в Chrome:

function Person(name){this.name=name;}; 
Person.initChildClass=function(className,talkMethod){ 
    window[className]=function(){Person.apply(this,arguments)} 
    window[className].prototype.talk=talkMethod; 
} 
Person.initChildClass("PoliceMan",function(){alert("I am a police man")}); 
Person.initChildClass("LittleBoy",function(){alert("googoogaagaa");}); 
var cop=new PoliceMan("Bob"); 
cop; 

Скопируйте и вставьте свой код в Дев инструментов (Chrome), и вы увидите, что он говорит, окно (анонимная функция), а не «Коп» для полицейского.. Как заставить его сказать «Cop»?

+0

_ "Есть ли способ сделать' вар привет = функция [туЗЬптд]() {} '?" _ - Ну вы _could_ использовать 'Eval()' ... – nnnnnn

+0

Может, вероятно, что-то сделать с строкой и 'eval()'. – jfriend00

+0

К сожалению, ничего перспективного здесь нет: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name – jfriend00

ответ

1

Попробуйте

func.displayName = "whatever"; 

, но она не может работать во всех браузерах. См Function.displayName: и same thing in Chromium

+0

Спасибо ... похоже, что ни один из браузеров (хром, firefox, или сафари) используют имя displayName как имя класса. Firefox и Safari просто говорят Object (я предполагаю, что они вообще не помещают имя класса), а хром все еще говорит окно (анонимная функция). Судя по этой ссылке, это все еще то, что они разбираются. –

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