Почему работает данный код? (PHD KITTY)


#1
// Teach your pet to answer questions!

// Luckily, all the answers are "2"
function sayTwo(event) {
    // Use pet.say() to answer "2"
    pet.say("2");
}

// Use pet.on() to handle "hear" events with sayTwo
pet.on("hear", sayTwo);
// Now relax and watch the show.
hero.say("One plus one is...?");
hero.say("x^3 - 6x^2 + 12x - 8 = 0. What is x...?");
hero.say("How many moons does Mars have...?");

Почему работает данный код?

Питомец всегда отвечает “2” на каждую мою фразу. Так устроен JavaScript, или это особенность игры такая?! В смысле, вот мой взгляд на вещи:

pet.on("hear", sayTwo);

Этот код выполниться не должен. По всей видимости оно ожидает какого-то события, но перед этой строчкой нет события, поэтому игнор.

hero.say("One plus one is...?");
hero.say("x^3 - 6x^2 + 12x - 8 = 0. What is x...?");
hero.say("How many moons does Mars have...?");

Тут герой должен просто произнести три фразы подряд. Вместо этого, после каждой фразы, программа отсылает нас к pet.on - это расценивается как событие, и питомец произносит фразу. wtf? Где именно та часть кода, которая перебрасывает очередность выполнения процедур к строчки pet.on, после каждой команды hero.say?!

hero.say("One plus one is...?");
    goto  pet.on("hear", sayTwo);
    goto  hero.say("x^3 - 6x^2 + 12x - 8 = 0. What is x...?");
hero.say("x^3 - 6x^2 + 12x - 8 = 0. What is x...?");
    goto pet.on("hear", sayTwo);
    goto hero.say("How many moons does Mars have...?");
hero.say("How many moons does Mars have...?");
    goto pet.on("hear", sayTwo);

Разве не должно быть что-то типа такого?) Этот код стоит расценивать скорее как псевдокод, если что)


#2

Привет!

Метод on для питомца является указанием на ождание события. Когда событие происходит, питомец выполняет заданую функцию.

pet.on('ЧТО-ТО ПРОИЗОШЛО', сделатьДейтвие);

Конкретно в твоем случае, ты говоришь питомцу, чтобы каждый раз как он что-то услышит (hear), он выполнял функцию sayTwo. И с этого момента он будет “слушать”, когда случится это событие до конца кода или пока ты не отменишь это методом pet.off.


#3

Спасибо. Это только в игре такое? Или в Javascript я тоже могу использовать такой трюк? Если да, то как он называется, что я могу попуглить и прочитать про это?!


#4

Это эвенты, есть во всем JS. https://learn.javascript.ru/events-and-interfaces
Позволяю “слушать” определенные события для каких-то элементов :slight_smile:


#5

Понял, спасибо.11111


#6

gimme a screenshot.:sunglasses: