Содержание

Пример создания класса на JS

Чуть новее чем в class

Как классы на JS создаю Я. Небольшой и понятный код как легко создать класс который будет работать на всех более или менее новых браузерах.

function MyBaseClass() {
	return {
			'toString': function() { return "x=" + this.x + " y=" + this.y;  }
	};
}
 
function MyClass(arg_x, arg_y) {
	if ( ! (this instanceof MyClass)) return new MyClass(arg_x, arg_y);
 
	// Public scope variables
	var _exports_ = new MyBaseClass();
	_exports_['x'] = arg_x;
	_exports_['y'] = arg_y;
 
	// Private scope variables
	var x = arg_x, y  = arg_y;
 
	_exports_['getLocalX'] = function() { return x; };
	_exports_['setLocalX'] = function(value) { x = value; };
	_exports_['getLocalY'] = function() { return y; };
	_exports_['setLocalY'] = function(value) { y = value; };
 
	_exports_['getPublicX'] = function() { return this.x; };
	_exports_['setPublicX'] = function(value) { this.x = value; };
	_exports_['getPublicY'] = function() { return this.y; };
	_exports_['setPublicY'] = function(value) { this.y = value; };
 
	return _exports_;
}
 
// Example of usage
var a = new MyClass(0, 0); // With new keyword
a.setLocalX(5);
a.setPublicX(10);
var b = MyClass(100, 100); // Without new keyword
b.setLocalX(105);
b.setPublicX(110);
 
console.log(a, ""+a, a.getLocalX());
console.log(b, ""+b, b.getLocalX());

Старый JS в виде prototypes работает для NodeJS версий 0.12

function extend (base, constructor) {
	var prototype = new Function();
	prototype.prototype = base.prototype;
	constructor.prototype = new prototype();
	constructor.prototype.constructor = constructor;
}
 
// Base class
function App(name, surname) {
	if (!(this instanceof App)) throw new Error("not constructed");
	this._name = name;
	this._surname = surname;
}
 
App.prototype.getName = function() {
	return this._name;
}
 
App.prototype.toString = function() {
	const about = {};
	about[this.__proto__.constructor.name] = {
		"name": this._name,
		"surname": this._surname
	}
	return JSON.stringify(about);
}
 
// Extended Class
function Zeffa(name, surname, age) {
	App.call(this, name, surname);
	this._age = age;
}
 
// important that this happens before you override methods on parent class
extend(App, Zeffa);
 
Zeffa.prototype.getAge = function() {
	return this._age;
}
 
// Test
const a = new Zeffa("Василий", "Пупкин", 18);
console.log("" + a);
console.log(a.getAge());