Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как получить текст функции


Автор: flaviovich 25.9.2005, 17:10
Здразвуйте знакоти!
У меня вот такая проблема: мне нужно получить полный текст фунции в переменную. Функция находится во внешним файле:
<script language="JavaScript" src="js/forms.js"></script>

Я пробовал вот так
var x = document.getElementsByTagName("script")[0];
alert(x);

но это возвращает Object HTMLScriptElement.
Скажи пожалуйста как дальше..
а может вообще не правильно делаю?

Автор: o.s.a. 25.9.2005, 17:16
Цитата
toSource()  JavaScript 1.3

Возвращает строку исходного кода функции.

Возвращаемое значение
Метод toSource возвращает следующие значения:

Для встроенного объекта Function метод toSource возвращает следующую строку, означающую, что исходный код недоступен:
Function Function() {
[native code]
}

Для специальных функций метод toSource возвращает JavaScript-источник, который определяет объект как строку.

Параметры
None.

Автор: flaviovich 25.9.2005, 17:31
А пример дадите? А то у меня получается только {}

Автор: o.s.a. 25.9.2005, 17:48
Код

<html>
<title></title>
<script type="text/javascript">
 function my() {
   alert("Hello world!!!");
 }
</script>
</style>
<body>
<script type="text/javascript">
alert(my.toSource());
</script>
</body>
</html>

Автор: Zeroglif 25.9.2005, 21:37
flaviovich

Цитата
А пример дадите? А то у меня получается только {}


Это потому что метод, предложенный o.s.a, применить нужно к функции:

Код

alert(myFunctionName.toSource());


а не так:

Код

alert(document.getElementsByTagName("script")[0].toSource());


Правда, в IE это всё равно не работает, но можно сделать так:

Код

alert(myFunctionName+'');


Или же (если в файле .js действительно всего одна функция) так:

Код

alert(document.getElementsByTagName('script')[0].innerHTML);


Автор: Sardar 25.9.2005, 21:43
toSource() в IE не существует, юзаем toString() - выдаст как раз текст функции

Автор: flaviovich 25.9.2005, 22:00
Спасибо большое ребята!
Вы мне очень помогли, только дальше мне надо получить доступ к переменной.
Допустим, у меня есть функция во внешним файле forms.js
Код

function f()
{
  var x = 5;
}

Как получить значение 5?
Заранне благодарю!

Автор: Zeroglif 26.9.2005, 08:12
Переменная объявлена локально, доступа извне функции к ней нет. Или делай её глобальной (убирай var), или пусть функция её вернёт (return x), или, если условия задачи неизменяемы, то вытаскивай из строки заданный текст любыми подходящими строковыми методами.

Автор: Sardar 26.9.2005, 15:29
Только помни, функция что может исполняться, это обьект "функция", а её исходный код это нечто совсем другое, скорее в целях отладки. А то чую какой то изврат ты задумал...

Опиши задачу в целом.

Автор: flaviovich 26.9.2005, 19:07
Функцию нельзя изменять.
Вот что я задумал: Иметь весь текст функции в каком-нибудь массиве (допустим), и с ним делать все что угодно.
Zeroglif угадал!
Ну как, это возможно? или я плохо объяснял?

Автор: Zeroglif 26.9.2005, 21:45
Цитата
Вот что я задумал: Иметь весь текст функции в каком-нибудь массиве (допустим), и с ним делать все что угодно.


Тебе бы лучше ясно форуму обозначить, какой результат треба получить, а так... можно много о чём фантазировать в свете возможностей великолепного Javascript. ;)


Автор: Sardar 26.9.2005, 21:51
Цитата(flaviovich @ 26.9.2005, 18:07)
и с ним делать все что угодно

Я с трудом представляю зачем это может понадобиться...
В любом случае придёться писать парсер JS кода, которым будешь разбирать/собирать функцию. Затем полученное дело функции можешь превратить в обьект функцию через new Function(аргументы, тело)

Если опишешь задачу, а не свои мысли, то вероятно получишь более правильное решение smile
Добавлено @ 21:51
Zeroglif опередил smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)