Javascript: метод вызова для динамически сгенерированного имени объекта

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

function doSomething(type) {
    type.someMethod();
}

Обратите внимание, что я не хочу передавать объект в функцию.

если вы не хотите передавать объект. вы можете попробовать использовать eval

Ronn Wilder 29.05.2018 15:26

попробуйте eval (type + ".method ()");

Ronn Wilder 29.05.2018 15:27

Зависит от объема объекта. Если это глобальное окно [type] .someMethod (), будет работать, но использование переданного имени объекта обычно является ужасной идеей, поскольку оно подвержено ошибкам. Лучше всего передать реальный объект.

zfrisch 29.05.2018 15:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
72
4

Ответы 4

Вам нужно оценить имя объекта или метод.

eval(type)['someMethod']();

или же

eval(type + '.someMethod()');

Также, если ваш объект находится в области действия окно, вы можете сделать

window[type].someMethod();

Вероятно потому, что для этого не нужно использовать eval.

adam0101 29.05.2018 15:34

Если ваш объект глобальный, вы можете сделать это:

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

Другие вопросы по теме