Я создаю файл агента JS «библиотека», но я хочу, чтобы инкапсулировать его в полном комплекте в пределах объекта, чтобы избежать загрязнения пространства имен страниц, содержащих файлСоздание библиотеки JS с динамической функцией вызова
В twist to this находится внутри функции внутри библиотеки, мне нужно вызвать другие функции в библиотеке по имени, например, используя window[]
Код ниже - это всего лишь образец, на самом деле это будет несколько сотен функций, которые можно было бы назвать по имени. Это вызвано неприятностями, поскольку я не могу получить window[]
, чтобы ссылаться на эту функцию, как правильно это сделать?
Я попытался это, в странице хоста:
<script src= "mylib.js"></script>
var oMyLib = new cMyLib(); //there will only ever be one 'instance' of this
В mylib.js все содержится в одной функции:
function cMyLib() {
this.doStuff = function() {
someFunc(this); //call another function in the lib
}
// I tried it with prototypes also
// cMyLib.prototype.doStuff = function() {
// someFunc();
// }
function someFunc(that) {
var s='anotherFunc1'
var f = window[s]; //undefined!
f();
s='anotherFunc2'
f=window[s];
f();
}
function anotherFunc1() {}
function anotherFunc2() {}
}
только глобальные функции отображаются как свойства 'window', и вы не хотите этого делать (поскольку это загрязняет пространство имен). Почему, по-вашему, вам нужно вызвать 'window ['anotherFunc1']' как это? – Alnitak
riiight, который имеет смысл, шлепает лоб, теперь я думаю, что если я не хочу использовать eval, я не думаю, что на самом деле это плохо, я мог бы создать массив функций, на которые ссылается число. его для эмулятора процессора, поэтому функции предназначены для инструкций, которые в любом случае приравниваются к номерам. – martinc
вы не можете дать функции числовое имя, но вы можете сделать это. this.insns = {}; this.insns [0x4c] = function lda (...) ' – Alnitak