if (substr ($ str, -1, 1) == ',') {$ str = substr ($ str, 0, -1); }
вы ищете global
Обратите внимание, однако, что в модулях ничто никогда не подвергается этому уровню
Если вам нужно это в области модуля, вы можете использовать что-то вроде этого
var module = require('moduleName');
module['functionName'](arguments);
Я использую это для узла, см., работает ли этот подход для вас
var _ = require('lodash');
var fnA1 = require('functions/fnA1');
var fnA2 = require('functions/fnA2');
module.exports = {
run: function(fnName, options, callback) {
'use strict';
var nameSpace = fnName.toString().split('.');
// if function name contains namespace, resolve that first before calling
if (nameSpace.length > 1) {
var resolvedFnName = this;
_.forEach(nameSpace, function(name){
resolvedFnName = resolvedFnName[name];
});
resolvedFnName(options, callback);
} else {
this[fnName](options, callback);
}
},
fnA1: fnA1,
fnA2: fnA2
};
, называть это как
importVariable.run('fnA1.subfunction', data, function(err, result){
if (err) {return callback(err);}
return callback(null, result);
});
, определите все методы как свойства обработчика:
var Handler={};
Handler.application_run = function (name) {
console.log(name)
}
Теперь назовите его следующим образом:
var somefunc = "application_run";
Handler[somefunc]('jerry codes');
Выход: коды jerry
// Handler.js
module.exports={
// name_exported : internal_name
application_run = function (name) {
console.log(name)
}
}
Использовать метод, определенный в Handler.js
в different.js
:
// different.js
var methods = require('./Handler.js') // path to Handler.js
methods['application_run']('jerry codes')
Выход: коды jerry
Это не относится к объекту окна. В JavaScript можно получить доступ к любому свойству объекта. Например,
var test = {
prop1 : true
};
console.log(test.prop1); // true
console.log(test["prop1"]); // also true
Подробнее здесь: https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects
Если вам нужна такая возможность внутри модуля, один взлом - это хранить такие функции модуля в переменных внутри модуля, а затем вызывать их путем доступа к ним из свойств объекта модуля. Пример:
var x = { }; // better would be to have module create an object
x.f1 = function()
{
console.log('Call me as a string!');
}
Теперь в модуле вы можете вызвать его, используя значение из строки:
var funcstr = "f1";
x[funcstr]();
Я изучаю веревки с самим узлом, выше вероятно, всевозможные ошибки :-). Возможно, более лучший способ написать этот пример будет (для модуля m.js):
module.exports =
{
f1: function() { console.log("Call me from a string!"); },
f2: function(str1) { this[str1](); }
}
Теперь вы можете:
var m = require('m.js');
m.f2('f1');
Или даже просто:
var m = require('m.js');
m['f1']();
FWIW!
global[ 'functionName' ]( ... )
будет работать, если функция находится на глобальном уровне. Но, как я уже сказал, модули не выставляют ничего на этот уровень, все они завернуты в анонимную область. – Mark Kahn 21 November 2011 в 04:50