JSFiddle - React, Tailwind, and code Playground

by anonystick

JavaScript

// Class for creating multi inheritance.
class multi
{
	// Inherit method to create base classes.
	static inherit(..._bases)
	{
		class classes {

			// The base classes
  			get base() { return _bases; }

			constructor(..._args)
			{
				var index = 0;

				for (let b of this.base) 
				{
					let obj = new b(_args[index++]);
   					multi.copy(this, obj);
				}
			}
		
		}

		// Copy over properties and methods
		for (let base of _bases) 
		{
   			multi.copy(classes, base);
   			multi.copy(classes.prototype, base.prototype);
		}

		return classes;
	}

	// Copies the properties from one class to another
	static copy(_target, _source) 
	{
    		for (let key of Reflect.ownKeys(_source)) 
			{
        		if (key !== "constructor" && key !== "prototype" && key !== "name") 
				{
	        	    let desc = Object.getOwnPropertyDescriptor(_source, key);
	        	    Object.defineProperty(_target, key, desc);
        		}
    		}
	}
}

class Dog{
	constructor(hands){
  	this.hand = hands;
  }
  
  callHandDog(){
  	console.log('callHandDog>>', this.hand);
  }
}

class Pig{
	constructor(hands){
  	this.hand = hands;
  }
  
  callHandPig(){
  	console.log('callHandPig>>', this.hand);
  }
  
}


class Animal extends multi.inherit(Dog, Pig){
	constructor(hands){
  	super(hands, hands)
  }
  
  init(){
  	super.callHandPig();
    super.callHandDog();
  }
  
}

const _animal = new Animal(4);
_animal.init();
//(index):97 callHandPig>> 4
//(index):87 callHandDog>> 4