Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   метод call() - ошибка ( (https://javascript.ru/forum/events/4535-metod-call-oshibka.html)

mrValter 31.07.2009 11:08

метод call() - ошибка (
 
Здравствуйте, не могу понять где возникает ошибка.
есть класс. в нем имется переменная onload
хочу запустить метод, название которого содержится в onload. FF Выдает ошибку this.onload.call() is not a function.
код примерно такой:
var net=new Object();
net.ContentLoader=function(onload)
{
this.onload=onload;
this.content();
}
net.ContentLoader.prototype.content=function()
{
this.onload.call(this);
}
function pool()
{
alert("запустилась");
}

и запускаю класс :
var one = new net.ContentLoader('pool');

Kolyaj 31.07.2009 11:23

Цитата:

Сообщение от mrValter
var one = new net.ContentLoader('pool');

pool без кавычек.

mrValter 31.07.2009 11:28

Нет, кавычки нужны, так как я передаю строку, а именно название метода.

Kolyaj 31.07.2009 11:32

У строки нет метода call. На php пытаетесь писать.

mrValter 31.07.2009 11:35

то есть, никак нельзя запустить функцию, имя которой содержится в переменной?

B~Vladi 31.07.2009 11:36

Имя функции это и есть переменная, вот её и передавайте как переменную.

Kolyaj 31.07.2009 11:39

Цитата:

Сообщение от mrValter
то есть, никак нельзя запустить функцию, имя которой содержится в переменной?

Если функция лежит в глобальном скопе, то window[name]()

mrValter 31.07.2009 11:40

Цитата:

Сообщение от B~Vladi (Сообщение 25731)
Имя функции это и есть переменная, вот её и передавайте как переменную.

Немножко не понял, это как сделать? не могли бы вы показать на примере?

mrValter 31.07.2009 11:47

Цитата:

Сообщение от Kolyaj (Сообщение 25732)
Если функция лежит в глобальном скопе, то window[name]()

попробовал так, пишет тоже самое функция window.this.onload() не существует...

Kolyaj 31.07.2009 11:50

Цитата:

Сообщение от mrValter
не могли бы вы показать на примере?

Сказал же, кавычки уберите.

mrValter 31.07.2009 11:54

Может я просто не уточнил что мне хотелось бы, что бы получилось.
Есть страница с ajax. написал класс который получает данные и делает запрос к серверу, но так как обработка ответа от сервера, в зависимости от задачи на странице разная, то нужно запускать разные обработчики(методы), имена которых передаются в класс.
Почитал мануал, там оказался метод call, который их и запускает. но возникает ошибка говорит что такой функции не существует. Вопрос как запустить функцию, имя которой содержится в переменной:
var onload="pool";

function pool()
{
alert("функция");
}
onload.call() - не работает. Почему? и есть ли решения такой задачи..

Kolyaj 31.07.2009 11:55

Не надо передавать никакое имя, нужно передавать функцию.

mrValter 31.07.2009 12:00

Цитата:

Сообщение от Kolyaj (Сообщение 25737)
Не надо передавать никакое имя, нужно передавать функцию.

Спасибо! Получилось. Просто раньше в основном программировал на php. И не перестаю удивляться javascript-у... Еще раз Спасибо)

Michael 22.09.2009 16:28

Можно и имя передавать.
Тогда запускаем так:
var name = 'my_function_name';
window[name]();

Или window.oMyClass[name];
Помним что в js все объект и что есть большой брат window.

Kolyaj 22.09.2009 16:41

Michael, а кто сказал, что функция лежит в глобальном скопе или является методов какого-то конкретного объекта?


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