Классы

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;
    }
}