javascript - скрипт - создание опроса php




Динамическое создание функций в JS (2)

Ну, вы можете использовать конструктор Function , как в этом примере:

var f = new Function('name', 'return alert("hello, " + name + "!");');
f('erick');

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

var fs = [];
fs['f1'] = new Function('name', 'return alert("hello, " + name + "!");');
fs['f1']('erick');

Загрузка xml зависит от того, запущена ли она в браузере или на сервере.

Я создаю движок AI для игры JS, и он сделан из Finite State Machines. Я загружаю количество состояний и их значения переменных из XML. Я также хочу загрузить поведение, и, поскольку у меня нет времени на создание языка сценариев, я подумал, что было бы неплохо «вставить» код JS во внешние файлы (внутри узлов XML) и выполнить его в потребность.

Что-то вроде того

<evilguy1>
    <behaviour>
        this.x++;
    </behaviour>
    <behaviour>
        this.y++;
    </behaviour>
</evilguy1>

Чтобы что-то подобное:

function behaviour_1(){
    this.x++;
}
function behaviour_2(){
    this.y++;
}

Мой вопрос: теперь, когда у меня загружен код, как я могу его выполнить? Я хотел бы создать функцию с уникальным именем для каждого «узла» кода, а затем вызывать их из игровой логики, но я не знаю, возможно ли это (поскольку вы можете загрузить больше кода JS из HTML, вы также должен быть в состоянии сделать это из кода JS, нет?). Если нет, есть ли подобное решение? Заранее спасибо!

(PS: чем меньше зависит от внешней библиотеки, тем лучше)

Изменить 1:

Хорошо, теперь я знаю, как создавать функции, содержащие код

window[classname] = function() { ... };

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

var functions = {};
var behaviorsNames = ['behavior1', 'beahvior2'];
var behaviorsBodies = ['this.x++', 'this.y++'];
for (var i = 0; i < behaviors.length; i++){
    functions[behaviors[i]] =  new Function(behaviorsBodies[i]);
}

//run a function
functions.behavior1();

или как глобалы:

var behaviorsNames = ['behavior1', 'beahvior2'];
var behaviorsBodies = ['this.x++', 'this.y++'];
for (var i = 0; i < behaviors.length; i++){
    window[behaviors[i]] = new Function(behaviorsBodies[i]);
}




javascript