@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 могут быть реализованы с помощью функций-конструкторов или классов, определяющих абстрактные методы, которые должны быть реализованы в классах, реализующих данный интерфейс.