2015-07-17 5 views
1

Так я в то числе определенной библиотеки, как этотJavascript - Получить имя функции, как строка

var start = function() { ... } 

var loadScript = function() { 
    script  = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'https://whatever.com/js?callback=start'; 
    document.body.appendChild(script) 
} 

window.onload = loadScript; 

Как вы видите, я поставил функцию под названием «стартом», как обратный вызов для библиотеки. Проблема в том, что если я уменьшу файл, функция не будет называться start.

Я пробовал это, но он не работает.

script.src = 'https://whatever.com/js?callback=' + start.name; 

Как я могу программно добавить имя функции атрибута src?

EDIT

Я использую Rails 4, а активы в CoffeeScript, так что я не думаю, что я могу использовать именованные объявления функций.

+1

Из-за того, как вы заявляете о своих функциях, они действительно * никогда не имеют имен. Назначение ссылки функции на переменную не дает функции имени. – Pointy

+0

Тем не менее, ваш минивер должен иметь способ маркировать символ как «экспортированный» или что-то в этом роде. Как вы сокращаете? * edit * - yes true; Я просто был бесполезным педантом :) – Pointy

+0

Где вы установили 'start.name'? –

ответ

1

Большинство минификаторов не разрушают глобальные указатели. Так что если у вас есть window.start (хотя не рекомендуется супер слишком много общих глобальных имен).

Или, чтобы оправдать его, window.MyAPP.Myutil.start

Другое дело, иметь в виду, что анонимные функции не имеют name свойства, несмотря на то, что вы присвоили его переменной. Вам нужно добавить его в объявление функции.

window.start = function start() { 
    // stuff 
} 
+0

Я использую Rails, а актив находится в Coffeescript, поэтому я не уверен, могу ли я писать объявления с именем функции. –

+1

Если функция должна использоваться для обратного вызова JSONP, она должна быть глобальной в любом случае. – Pointy

+0

Это уже глобально. Но он все равно меняет свое название. –

0

Вы можете сделать это так и будет работать с любым мининауком.

var start = function() { ... } 
var someObj = {'start': start}; 

Затем используйте someObj['start']() для вызова функции запуска.