Javascript является языком на основе прототипов, поэтому он не имеет реальных классов. Тем не менее, ES6 добавил ключевое слово class
, которое легче читать, но все еще использует прототипы.
Все в javascript - это объект, включая функции. Когда вы вызываете функцию с помощью ключевого слова new
, она создает новый объект и присоединяет его к this
внутри этой функции. Таким образом, в вашем конструкторе вы можете сделать this.foo = function(){
, чтобы прикрепить функцию к вашему новому объекту. Однако это неэффективно, поскольку выполняется каждый раз, когда вы создаете новый объект. Лучше использовать прототипы, чтобы каждая функция создавалась только один раз:
var Stack = function() {
// Initialize local variables.
this.count = 0;
this.storage = {};
}
// Attach class methods
Stack.prototype.foo = function() { ... }
Stack.prototype.bar = function() { ... }
// Create instance of class.
var myStack = new Stack();
Поскольку ключевое слово class
было добавлено недавно, вам потребуется использовать функциональный способ, если вы хотите поддерживать IE11 или другие старые браузеры, если вы не используете транспортер.