class Game {
constructor(name) {
this.name = name;
this._listeners = [];
}
addListener(listener) {
this._listeners.push(listener);
}
start() {
for (let listener of this._listeners) {
listener.gameStarted(this.name);
}
}
}
class Statistic {
constructor() {
this.startsCount = 0;
this.lastGame = "";
}
gameStarted(name) {
this.startsCount++;
this.lastGame = name;
}
}
let statistic = new Statistic();
let heroes = new Game("Heroes");
let doom = new Game("Doom");
//subscribe to events
heroes.addListener(statistic);
doom.addListener(statistic);
doom.start();
heroes.start();
//statistic.lastGame is "Heroes"
//statistic.startsCount is 2
console.log(statistic.lastGame);
console.log(statistic.startsCount);
// *** previous version ***
function OldGame(name) {
this.name = name;
var listeners = [];
this.addListener = function(listener) {
listeners.push(listener);
}
this.start = function() {
for (var i in listeners) {
if (listeners.hasOwnProperty(i)) {
listeners[i].gameStarted(this.name);
}
}
}
}
function OldStatistic() {
this.startsCount = 0;
this.lastGame = "";
this.gameStarted = function (name) {
this.startsCount++;
this.lastGame = name;
}
}