Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Хотел создать генератор, но незнаю как правильно с точки зрения прототипного подхода. (https://javascript.ru/forum/misc/65567-khotel-sozdat-generator-no-neznayu-kak-pravilno-s-tochki-zreniya-prototipnogo-podkhoda.html)

Ivan777 26.10.2016 08:34

Хотел создать генератор, но незнаю как правильно с точки зрения прототипного подхода.
 
Я решил сделать карточную игру у меня есть сущность Карта, Наборы(по одному у каждого играка). Подкидной набор и генератор карт в случайном порядке.
Я решил написать классы через прототипы.
Генератор вижу как.

// Класс Card уже обьевлен
function* generateSequence() {
 // Получить массив options c индексами от 1 до 36 из файла
  for (let i =1; i <= 36; i++) {
    yield new Card(options[i]);
  }
}

Насколько оправдано использование let. Не лучше ли сложить обьекты карт в массив?
Игру пишу для себя и друзей, но хотелось бы чтобы работало.
Правильно ли я написал генератор.

Rise 26.10.2016 08:47

Ivan777, если класс объявлен через class то это и есть через прототипы, class - новая конструкция для ES6+ (как и function*, let, yield и тд)

fuckingquest 28.10.2016 22:36

Хуй ее знает, при чем тут прототипы, и в чем суть вопроса, но генераторы работают примерно так
arr = [1, 2, 3, 4, 5]
MyObject = {}
Object.defineProperty(MyObject, "double", {get: function(){return this.number + this.number}})
MyObjectConstructor = function(number){this.number = number}
MyObjectConstructor.prototype = MyObject
gen = function*(){
   for(var i = 0; i < arr.length; i++){
     yield new MyObjectConstructor(arr[i])
   }
}()

current = gen.next()
while(!current.done) { console.log(current.value.number, current.value.double); current = gen.next() }
delete current

и массив не является им альтернативой, так как это нечто типа ленивых списков. Каждая итерация замерзает до следующего вызова.
Что касается let, то тут, похоже, его не надо втыкать. Он на каждой итерации создает новое окружение, а тут, все работает и без него прекрасно, кроме лишнего оверхеда от него толку тут нет

fuckingquest 29.10.2016 00:23

Меня больше всего интересует, причем тут вообще прототипный подход? Может я недопонял чего-то?


Часовой пояс GMT +3, время: 15:08.