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