class

Починаючи з ES6 можна використовувати класи, наприклад:

class MyClass {
	// Звичайне поле обʼєкта класу 
	// (може мати значення за замовчуванням, як в даному випадку, або не мати його)
	myProperty = 'default value';

	// Конструктор (автоматчно викликається щоразу при створенні обʼєкта класу)
	constructor(value = null) {
		if (value !== null) { 
			this.myProperty = value;
		}
	}
	
	// Метод обʼєкта класу
	myMethod() {
		console.log(this.myProperty)
	}
}

// Створюємо обʼєкти класу, передаємо значення в конструктор
let obj1 = new MyClass('some value');
let obj2 = new MyClass('another value');

obj1.myMethod(); // some value
obj2.myMethod(); // another value

Наслідування, super

Наслідування тепер виглядає саме як наслідування класів один від одного:

class MyParent {
	constructor(value) {
		this.myProperty = value;
	}
	
	myMethod() {
		console.log(this.myProperty);
	}
}

// MyChild наслідується від MyParent, 
// всередині MyChild ключове слово `super` вказує на MyParent (супертип)
class MyChild extends MyParent {
	// Тут за потреби перевизначаємо деякі методи і властивості, додаємо нові
  
	constructor(value, anotherValue) {
		// В конструкторі спочатку обовʼязково викликаємо батьківський конструктор
		super(value);

		this.anotherProperty = anotherValue;
	}

	myMethod() {
		// В перевизначених методах за потреби можемо викликати батьківську реалізацію 
		super.myMethod();

		console.log(this.anotherProperty);
	}
}

let parentObj = new MyParent('some parent value');
let childObj = new MyChild('some child value', 'some another value');

parentObj.myMethod(); // some parent value
childObj.myMethod(); // some child value some another value

Статичні поля і методи