Как можно вызвать метод для динамически сгенерированного имени? Это случай, когда я передаю имя объекта функции и вызываю метод для этого объекта. Что-то вроде этого, где тип - это имя объекта, для которого я хочу выполнить метод:
function doSomething(type) {
type.someMethod();
}
Обратите внимание, что я не хочу передавать объект в функцию.
попробуйте eval (type + ".method ()");
Зависит от объема объекта. Если это глобальное окно [type] .someMethod (), будет работать, но использование переданного имени объекта обычно является ужасной идеей, поскольку оно подвержено ошибкам. Лучше всего передать реальный объект.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно оценить имя объекта или метод.
eval(type)['someMethod']();
или же
eval(type + '.someMethod()');
Также, если ваш объект находится в области действия окно, вы можете сделать
window[type].someMethod();
Вероятно потому, что для этого не нужно использовать eval.
Если ваш объект глобальный, вы можете сделать это:
var global = global || window;
function doSomething(type) {
global[type].someMethod();
}
var myObject = {
someMethod : function () { console.info("calling someMethod") },
};
doSomething("myObject");Во-первых, неясно, к какому объекту относится этот «тип». Я предполагаю, что это в рамках, может быть, что-то вроде этого:
var typeObjects = {
type1: {
doSomething: function(){..},
..
},
type2: {
doSomething: function(){..},
..
},
..
}
Тогда ваша функция станет следующей:
function doSomething(typeName) {
typeObjects[typeName].someMethod();
}
И тогда вы бы назвали это так:
doSomething('type1');
Если вы хотите передать имя переменной функции, рассмотрите возможность передачи имени свойства предопределенного объекта, чтобы ваша функция не могла небезопасно обращаться к произвольным объектам из своей области действия с помощью eval(), что является плохой практикой как по соображениям безопасности, так и по соображениям производительности. .
var myObject = {
foo: { someMethod () { console.info('fooObj') } },
bar: { someMethod () { console.info('barObj') } }
}
function doSomething (property) {
if (myObject.hasOwnProperty(property)) {
myObject[property].someMethod()
}
}
doSomething('foo')
doSomething('bar')
doSomething('nil') // does nothing
если вы не хотите передавать объект. вы можете попробовать использовать eval