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,5 +1,8 @@
 export default class World {
-  constructor() {
+  constructor(options) {
+    this.load = options.load;
+    this.init = options.init;
+
     // Object that will hold loaded images
     this.images = {};
 
@@ -8,10 +11,18 @@
     this.image.load = (name, url) => {
       this.image.pending += 1;
       this.images[name] = new Image();
-      this.images[name].onload = function() {
+      this.images[name].onload = () => {
         this.image.pending -= 1;
-      }.bind(this);
+        this.tryInit();
+      };
       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
