title: Why use Node.js EventEmitter instead of just a plain function?
body: <p>Every article I read about node EventEmitters talks about how to create them. However, I have not seen a concrete example of why to use them instead of just a simple function. So for example , this is an example in a book I am reading of how to use the EventEmitter class on custom object via its constructor.</p>
  
  <hr>
  
  <pre><code>    var util = require('util');
      var events = require('events');
      var AudioDevice = {
          play: function(track) {
              // Stub: Trigger playback through iTunes, mpg123, etc.
              console.log("playing song: " + track);
          },
          stop: function() {
              console.log("song stopped");
          }
      };
  
      function MusicPlayer() {
          this.playing = false;
          events.EventEmitter.call(this);
      }
  
      util.inherits(MusicPlayer, events.EventEmitter);
  
      var musicPlayer = new MusicPlayer();
  
      musicPlayer.on('play', function(track) {
          this.playing = true;
          AudioDevice.play(track);
      });
  
      musicPlayer.on('stop', function() {
          this.playing = false;
          AudioDevice.stop();
      });
  
      musicPlayer.emit('play', 'The Roots - The Fire');
  
      setTimeout(function() {
          musicPlayer.emit('stop');
      }, 1000);
  </code></pre>
  
  <hr>
  
  <p>However, the following gives me the same result:</p>
  
  <hr>
  
  <pre><code>var AudioDevice = {
      play: function(track) {
          // Stub: Trigger playback through iTunes, mpg123, etc.
          console.log("playing song: " + track);
      },
      stop: function() {
          console.log("song stopped");
      }
  };
  
  function createMusicPlayer() {
      var musicPlayer = {};
      musicPlayer.playing = false;
      musicPlayer.play = function(track) {
          musicPlayer.playing = true;
          AudioDevice.play(track);
      },
      musicPlayer.stop = function(track) {
          musicPlayer.playing = false;
          AudioDevice.stop();
      }
  
      return musicPlayer
  }
  
  var musicPlayer = createMusicPlayer();
  
  musicPlayer.play('The Roots - The Fire');
  
  setTimeout(function() {
      musicPlayer.stop();
  }, 1000);
  </code></pre>
  
  <hr>
  
  <p>I'm wondering if event emitters are a design choice or a necessity when working with node. I know its a necessity to understand them since many modules employ this pattern, but I am curious if that choice is analogous to using factories over constructors etc. In other words is there anything I can do with EventEmitters that I can't do with functions ?</p>