JSFiddle - React, Tailwind, and code Playground

by Lau1989

JavaScript

var Living_being = function() { this.className = 'Living_being'; };

var Animal = function() {
    this.className = 'Animal';
    this.vector = {x: 0, y: 0};
}
Animal.prototype = new Living_being();
Animal.prototype.getClassName = function() { console.log('Instance of... '+ this.className); };
Animal.prototype.get_vector = function() { console.log(this.vector); }

var Flying_object = function() {
    this.className = 'Flying_object';
    this.value = 'some value';
}
Flying_object.prototype.getClassName = function() { console.log('Instance of... '+ this.className); };
Flying_object.prototype.get_val = function() { console.log(this.value); }

// So far so good...
var UFO = function() {};
UFO.protoype = new Flying_object(); //classical inheritance
var Fish = function() {};
Fish.protoype = new Animal(); //classical inheritance
// Now the tricky part: how to make Bird share all of the methods and properties of Animal and Flying_object ?
var Bird = function() { this.className = 'Bird'; };
Bird.prototype = mix(Animal, Flying_object);
var instance = new Bird();

//expected result:
instance.getClassName();//--> Instance of Bird
instance.get_vector();  //--> {x: 0, y: 0}
instance.get_val();     //--> 'some value'

function mix(classA, classB) {
	var instanceA = new classA(),
    	instanceB = new classB();
    for (var prop in instanceA) {
    	instanceB[prop] = instanceA[prop];
    }
    return instanceB;
}