Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамическое название функции (https://javascript.ru/forum/misc/9767-dinamicheskoe-nazvanie-funkcii.html)

Kein 04.06.2010 16:45

Динамическое название функции
 
Предположим в переменной у меня содержится имя функции, как мне создать её экземпляр?
Сейчас я создаю так:
element = new (window[elementName])();

Но позже не могу исследовать полученный элемент и получаю ошибку:
TypeError: Function.prototype.toString called on incompatible object

Может надо создавать как-то по другому?

exec 04.06.2010 17:04

function element() {
return (window[elementName])();
}

Gvozd 04.06.2010 17:09

Цитата:

Сообщение от Kein
переменной у меня содержится имя функции

зачем?
почему бы не хранить в переменной ссылку на ф-цию?

по-моему, вы подходите к проблеме не с того конца, и ее надо решать не используя имена ф-ций, а по нормальному
опишите свою более общую проблему

Kein 04.06.2010 17:15

Есть абстрактный объект который который представляет собой список, с расширенными методами поиска, перебора итд.
Каждый элемент создается вроде:
list.add({name: 'one', description: 'bla-bla'}, 'category');
Второй параметр это и есть название класса. Все передаваемые классы имеют свой одинаковый интерфейс и принимают данные идущие первым аргументом.
Получается в таком случае мне можно просто написать

list.add({name: 'one', description: 'bla-bla'}, category);

так?

Gvozd 04.06.2010 17:23

Цитата:

Сообщение от Kein
Получается в таком случае мне можно просто написать

list.add({name: 'one', description: 'bla-bla'}, category);

так?

в общем случае, да
и соовтественно вторым параметром в ф-цию list.add попадет именно ф-ция, и ее вполен можно будет вызвать как-то так:
list.add=function(obj,func){//метод вашего абстрактного объекта-списка
func(obj);
}

function category(obj){
alert(obj)
}
list.add({name: 'one', description: 'bla-bla'}, category);

Kein 04.06.2010 17:33

да, все получилось, php привычка хранить имя класса в тексте))


Часовой пояс GMT +3, время: 14:01.