Как работают интерфейсы в javascript?

Пользователь

от buster , в категории: JavaScript , 2 года назад

Как работают интерфейсы в javascript?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от fidel , год назад

@buster 

В JavaScript интерфейсы не являются отдельной сущностью или конструкцией, как в других языках программирования (например, Java). Однако, можно создать абстрактный класс, который будет выступать в роли интерфейса.


Для этого можно использовать функции-конструкторы или классы, в которых определяются только методы, необходимые для реализации конкретного функционала. Такие методы обычно не имеют тела (функция определена без указания блока тела), а сами функции имеют префикс "abstract" (абстрактный метод).


Классы, реализующие интерфейсы, должны содержать реализацию всех методов, определенных в интерфейсе. В противном случае, будет выброшено исключение.


Например, создадим интерфейс UserInterface с методом showInfo():

1
2
3
4
5
function UserInterface() {}
 
UserInterface.prototype.showInfo = function() {
  throw new Error('Abstract method cannot be called directly');
}


Затем можно создать классы, реализующие данный интерфейс:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
function User(name) {
  this.name = name;
}
 
User.prototype = Object.create(UserInterface.prototype);
 
User.prototype.showInfo = function() {
  console.log('User:', this.name);
}
 
function Admin(name) {
  this.name = name;
}
 
Admin.prototype = Object.create(UserInterface.prototype);
 
Admin.prototype.showInfo = function() {
  console.log('Admin:', this.name);
}


Теперь можно создать экземпляры классов и вызвать метод showInfo():

1
2
3
4
5
var user = new User('John');
var admin = new Admin('Peter');
 
user.showInfo(); // Output: User: John
admin.showInfo(); // Output: Admin: Peter


Таким образом, интерфейсы в JavaScript могут быть реализованы с помощью функций-конструкторов или классов, определяющих абстрактные методы, которые должны быть реализованы в классах, реализующих данный интерфейс.

Пользователь

от delphine_bartoletti , 7 месяцев назад

@buster