The problem is that you are using `getMap()` in the constructor of your control. But at the moment you instantiate the control, it is not yet added to the map. So, `getMap()` returns undefined.

You can overwrite `setMap(map)` in your control which is called by the map when executing `map.setControl()`.

    ol3_legend.prototype.setMap = function(map) {
      ol.control.Control.prototype.setMap.call(this, map);
      console.log(map);
    };