Есть три способа имитировать интерфейс JavaScript: 1. Метод комментариев 2. Проверьте метод атрибута 3. Метод идентификации формы в стиле утка
1. Метод комментариев: этот метод принадлежит к категории программных документов, а наследование и реализация интерфейсов совершенно сознательно зависит от программистов.
/*Интерфейс People {function createHead (); function createBody ();}*/var woman = function (name) {// реализует People interfacethis.name = name;} woman.prototype.showname = function () {alert (this.name);} wome.prototype.createebody = function = funct Создано ");} woman.prototype.createhead = function () {alert (" Голова была создана ");}// 2. Метод проверки атрибутов: добавьте метод интерфейса, который будет реализован в список атрибутов класса, и многократно проверяйте, были ли эти методы реализованы посредством определенного обнаружения.
// Плюсы и минусы: вы можете заставить программистов реализовать интерфейс, и если вы не поймете его, вы сообщите об ошибке. Однако, хотя он объявляет, какие методы вы реализовали, вероятно, будут упущения во время реализации
/*Интерфейс People {function createHead (); function createBody ();}*/var woman = function (name) {this.name = name; this.ImplementsInterfaces = ['' people '];} woman.prototype.showname = function () {alert (this.name);} Женщина. Создано ");} woman.prototype.createhead = function () {alert (" голова была создана ");} функция функции (obj, интерфейсы) {for (var i = 1; i <интерфейсы. j = 0; j <obj.ImplementsInterfaces.length; j ++) {if (obj.ImplementsInterfaces [j] = InterfacEname) {interfacefound = true; break;}} if (! Интерфейсфунд) {return false;} reture true;} функция isImplemts (экземпляр, интерфейс) { /} reture навсегда if (! Реал (экземпляр, интерфейсы)) {бросить новую ошибку ("объект не реализует требуемый интерфейс");}}3. Метод идентификации в стиле утки: ( утка не судит не по внешнему виду, а по тому, есть ли у нее характеристики утки. Как сказал Джеймс Уиткомб Райли, тот, кто ходит, как утка и ссоры,-это утка)
Оба вышеперечисленных заявляют, что они реализовали интерфейсы, но утверждение не важно. Ядро реализации интерфейса заключается в том, что класс реализует набор методов интерфейса. Если класс имеет функции с тем же именем функции метода, что и определенный интерфейс, он считается реализацией интерфейса
// класс интерфейса, используемый для создания интерфейса var interface = function (name, motheds) {if (agruments.length! = 2) {Выбросить новую ошибку ("интерфейс -конструктор, называемый"+Arguments.length+"Аргументы, но ожидается точно 2");} this.name = name; this.methods = []; Mothereds [i]! == 'String') {Throut New Error ('Interface Constructor ожидает, что имена Mothed будут'+'проходят как строка');} this.methods.push (motheds [i]);}} interface.prototype.ensureImplements = faction (objs) {if (agruments.length! "+Arguments.length+" Аргументы, но ожидается точно 1 ")} для (var i = 0; i <objs.length; i ++) {var obj = objs [i]; для (var j = 0; j <this.motheds.length; j ++) {var mothed = this.methods [j]; Если [! 'function') {throw new Error ('interface function.EnsureImplomements: реализует интерфейс'+this.name+', obj.mothed'+mothed+'не был найден');}}}} // Создание интерфейса var people = new Interface ('people', ['createHead', 'createBody']); // subclass var var = function (name ', это. name; this.ImplementsInterfaces = ['people'];} woman.prototype.showname = function () {alert (this.name);} woman.prototype.createbody = function () {// Реализуйте необходимый метод оповещения (». Создано ");} // subclass var man = function (name) {this.name = name; this.ImplementsInterfaces = ['people'];} man.prototype.showname = function () {alert (это. Создан ");} man.prototype.createhead = function () {alert (« Голова мужчины была создана »);} // защищать, реализовать ли poeple.ensureImpless (['woman', 'man']);