export default class World {
  constructor(options) {
    this.load = options.load;
    this.init = options.init;

    // Object that will hold loaded images
    this.images = {};

    // Provides image loading functionalities
    this.image = {pending: 0};
    this.image.load = (name, url) => {
      this.image.pending += 1;
      this.images[name] = new Image();
      this.images[name].onload = () => {
        this.image.pending -= 1;
        this.tryInit();
      };
      this.images[name].src = url;
    };

    this.load();
    this.tryInit();
  }

  tryInit() {
    this.image.pending || this.init();
  }
}

export default class World {
  constructor() {
    // Object that will hold loaded images
    this.images = {};

    // Provides image loading functionalities
    this.image = {pending: 0};
    this.image.load = (name, url) => {
      this.image.pending += 1;
      this.images[name] = new Image();
      this.images[name].onload = function() {
        this.image.pending -= 1;
      }.bind(this);
      this.images[name].src = url;
    };
  }
}

--- 
+++ 
@@ -1,8 +1,5 @@
 export default class World {
-  constructor(options) {
-    this.load = options.load;
-    this.init = options.init;
-
+  constructor() {
     // Object that will hold loaded images
     this.images = {};
 
@@ -11,18 +8,10 @@
     this.image.load = (name, url) => {
       this.image.pending += 1;
       this.images[name] = new Image();
-      this.images[name].onload = () => {
+      this.images[name].onload = function() {
         this.image.pending -= 1;
-        this.tryInit();
-      };
+      }.bind(this);
       this.images[name].src = url;
     };
-
-    this.load();
-    this.tryInit();
-  }
-
-  tryInit() {
-    this.image.pending || this.init();
   }
 }
Add hook to fire up when all images are loaded
