code: function Phaser(element) {
    check(element, 'element').is.anInstanceOf(Element)();
  
    var priv = {};
    priv.elem = element;
    priv.phase = null;
    priv.listeners = [];
    priv.phaseTriggers = new MultiMap();
    priv.started = false;
  
    var pub = {};
    var methods = [
      getPhase,
      nextPhase,
      addPhaseListener,
      removePhaseListener,
      addPhaseTrigger,
      removePhaseTrigger,
      startTransition,
    ];
  
    // This trick binds all methods to the public object
    // passing `priv` as the first argument to each call.
    methods.forEach(function(method) {
      pub[method.name] = method.bind(pub, priv);
    });
  
    return pub;
  }
docs: Creates Phaser.
  
  This constructor has no side-effects. This means that no ${link Phase phase class name}
  is set on given **element** and no eventlistener is set after calling it. For phaser to start
  doing some work, ${link Phaser.prototype.setPhase}, ${link Phaser.prototype.startTransition}
  or ${link Phaser.prototype.addPhaseTrigger} must be invoked.
  
  @param {Element} element container DOM element that will receive proper phase class names
  @fqn Phaser.prototype.constructor