Как создать случайное имя метода - PullRequest
1 голос
/ 12 марта 2010

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

<script src="www.foo.com/b?cb=d357534">

где cb - имя функции обратного вызова, сервер вернет

d357534({my json data});

я хочу знать, как создать случайное имя функции, я уверен, что смогу использовать eval, но разве это лучший способ?

По сути, я пытаюсь сделать следующее:

var d + Math.floor(Math.random()*1000001) = function(){...   

Ответы [ 3 ]

8 голосов
/ 12 марта 2010

Это должно делать то, что вы хотите.Вам нужно где-то сохранить имя функции, чтобы вы могли передать его на сервер, но вы можете сделать это внутри локальной области видимости, чтобы не загрязнять ваше глобальное пространство имен.

var functionName = 'd' + Math.floor(Math.random()*1000001);
window[functionName] = function() { ... }
1 голос
/ 29 марта 2010

Почему бы просто не использовать счетчик и увеличивать его каждый раз, когда вам нужна новая функция:

var name = "callback" + window.COUNTER++;
window[name] = function() { ... };

Если вы хотите избежать засорения глобального пространства имен слишком большим количеством ссылок, вы можете (и должны) прикрепить счетчик и обратные вызовы к одному глобальному объекту:

var JSONP = window.JSONP;
var name = "callback" + JSONP.COUNTER++;
JSONP[name] = function() { ... };

В этом случае вы можете вызвать метод следующим образом:

JSONP.callback_12(json);

Как правило, сначала нужно инициализировать объект JSONP и переменную COUNTER.

1 голос
/ 12 марта 2010

Чтобы создать глобальную переменную со случайным именем, вы можете сделать это:

window['randomvar' + Math.floor(Math.random()*1000001)] = function() { ... };

Теперь, конечно, у вас есть проблема с запоминанием случайного имени где-то. Вы можете создать случайное имя для этой переменной . Тогда вам нужно будет запомнить имя этой переменной , чтобы вы могли посмотреть на ее значение и затем узнать, как найти вашу функцию. Через некоторое время все станет странным.

...