JSFiddle - React, Tailwind, and code Playground

JavaScript

var extend = function(subClass,baseClass) {
	subClass.baseConstructor = baseClass;  //子类构造器总指向父类构造器;
	subClass.base = {};
	baseClass.call(subClass.base);       //将父类构造器this引用方法抄入子类构造器base属性中
}

function Mouse() {};

function Animal(name) {
	this.name = name;
	this.say = function(message) {
		console.log(this.name + ": " + message);
	}
	this.eat = function() {
		this.say('Yum!');
	}
}
function Cat() {
	Cat.baseConstructor.call(this,'cat');
	this.eat = function(food) {
		if(food instanceof Mouse) {
			Cat.base.eat.call(this);  //调用构造器抄入的eat方法;
		} else {
			this.say('Yuk! i only eat mice - not ' + food.name);
		}
	}

}
extend(Cat,Animal);

function Lion() {
	Lion.baseConstructor.call(this,'lion');
}
extend(Lion,Cat);

var cat = new Cat();
var lion = new Lion();
var mouse = new Mouse();
var unknowObj = {};

cat.eat(mouse);
cat.eat(unknowObj);
lion.eat(mouse);