#javascript #ecmascript-6
Вопрос:
Допустим, я импортирую несколько объектов, у которых один и тот же метод. Как я могу динамически ссылаться на них, скажем, по строкам.
Например,
import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';
const things = ['Foo', 'Bar', 'Baz'];
things.forEach(thing => {
thing.doSomething();
});
Комментарии:
1. Почему бы просто не выразить их как
const things = [Foo, Bar, Baz]
и не назвать метод таким образом…? Почему вы выразили их здесь в виде строк?2. Обязательно ли это должны быть струны?
3. Да, для моих целей должны быть веревочки
4. @charleszardo Почему? Можете ли вы подробнее рассказать о своем примере использования? Вы уверены, что это не проблема XY?
Ответ №1:
Если это должны быть строки, вы можете сделать это:
import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';
const things = {
'Foo': Foo, 'Bar': Bar, 'Baz': Baz
};
Object.keys(things).forEach(key => {
things[key].doSomething();
});
Если это не обязательно должны быть строки, вы можете просто создать массив импортированных объектов
import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';
const things = [Foo, Bar, Baz];
things.forEach(thing => {
thing.doSomething();
});
Комментарии:
1. Да, я думаю, мне следует согласиться с твоей первой рекомендацией. Я надеялся, что есть более простой способ сделать это без необходимости писать какое-то подобное отображение, но, возможно, его нет.
Ответ №2:
Просто не используйте строку , используйте так, как вы импортировали, вот так:
import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';
const things = [Foo, Bar, Baz];
things.forEach(thing => {
thing.doSomething();
});
Комментарии:
1. Проблема в том, что в моем случае это должны быть струны.