2016-06-06 4 views
0

Мне поручена графическая система меню, построенная на модели навигации на колесах, где каждый «слой» меню состоит из нового объекта «Колесо» со свойствами, которые определяют цвета и меню выбор и так далее.Эффективный способ создания множества объектов фабрики в Javascript

Я хотел бы использовать фабричный метод для создания единого общего объекта создателю для построения всех слоев, что-то похожее на собачьей завод из Маттиас Петтер Йохансон в funfunfunctions: видео: https://www.youtube.com/watch?v=ImwrezYhw4w расшифровку: https://medium.com/humans-create-software/factory-functions-in-javascript-video-d38e49802555#.mrrvx4a37

собак объект как Заводской метод:

const dog =() => { 
    const sound = 'woof' 
    return { 
    talk:() => console.log(sound) 
    } 
} 

// create a single new dog 
const sniffles = dog() 
sniffles.talk() // Outputs: "woof" 

Это хорошо работает, и я понимаю, как это работает. То, что пень меня немного, - это то, как «создать массу» около 30 собак, скажем ... перебирает множество имен собак с изменяемыми свойствами (разный цвет, размер и т. Д.).

Любые советы или примеры, которые нужно искать, очень ценятся!

ответ

2

Вот очень быстро наполовину написанный пример, я оставлю заполнение остальное в качестве упражнения для читателя:

const dogProps = [{color: "brown"}, {color: "black"}]; 
const dog = ({color}) => { 
    // construct with color 
}; 

const dogs = dogProps.map(dog); 
+0

Спасибо, Madara за быстрый ответ! Но если я получу свой код, я бы получил доступ к каждому из цветов собак через собак [1] ​​.color, dogs [2] .color и т. Д. Что, если бы я хотел получить к ним доступ через более личные имена ... sniffles.color, scruffy.color и т. д. ... используя массив для генерации имени объекта. ? –

+1

@JimmPratt В JS нет переменных переменных. Вы можете использовать назначение деструктурирования так: 'const [sniffles, scruffy] = dogProps.map (dog)'. Но вы не можете определить новую переменную во внутренней области с динамическим именем. –

+0

Мех, думал так много ... и используя eval() считается злым ... и используя dogNames = ["sniffles", "scruffy"); использование метода ['varname'] кажется бесполезным при попытке добавить методы и переменные (http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript/) .. так ... нормально, будет жить с собаками. Спасибо за ваше время! –

Смежные вопросы