JSFiddle - React, Tailwind, and code Playground

HTML

<div id="container"> </div>

JavaScript

function extend(current, base) {
	// копируем статические проперти
	for (var key in base) {
		if (base.hasOwnProperty(key)) {
			current[key] = base[key];
		}
	}
  // получаем прототип
	current.prototype = Object.create(base.prototype);

};

// Объявляем пространство имен Dialogs
var Dialogs;
(function (Dialogs) {

	// класс Popup
	Dialogs.Popup = (function () {
		// статическая функция
		Popup.show = function () {
			alert("show");
		};
		// Конструктор класса
		function Popup(message) {
			this._message = message;
		}
		Popup.prototype.hello = function () {
			var self = this;
			var message = $(this._message).click(function () {
					self.sayBye();
				});
			$("#container").append(message);
		};
		Popup.prototype.sayBye = function () {
			alert("Bye");
		};
		Popup.prototype.say = function () {
			alert(this._message);
		};
		return Popup;
	}());

	// класс Popup2 extend Popup
	Dialogs.Popup2 = (function (superClass) {
		extend(Popup2, superClass);
		function Popup2() {
			superClass.apply(this, arguments);
		}
		Popup2.prototype.sayBye = function () {
			alert("Bye2");
		};
		return Popup2;
	}(Dialogs.Popup));

})(Dialogs || (Dialogs = {}));

popup = new Dialogs.Popup("<div>Hello</div>");
popup.hello();
popup2 = new Dialogs.Popup2("<div>Hello</div>");
popup2.hello();

Dialogs.Popup2.show()