Existem três maneiras de imitar a interface JavaScript: 1. Método de comentário 2. Verifique o método de atributo 3. Método de identificação de forma de pato
1. Método de comentário: Este método pertence à categoria de documentos do programa, e a herança e a implementação de interfaces depende completamente conscientemente de programadores.
/*interface pessoas {function createHead (); function createbody ();}*/var woman = function (nome) {// implementa as pessoas interfacethis.name = name;} woman.prototype.showname = function () {alert (this.name);} woman.proTypet.create = function () {) {/mlet (}}; criado ");} mulher.prototype.createhead = function () {alert (" A cabeça foi criada ");}// 2. Método de verificação de atributos: adicione o método da interface a ser implementado à lista de atributos de classe e verifique repetidamente se esses métodos foram implementados por meio de detecção definida.
// prós e contras: você pode forçar os programadores a implementar a interface e, se não perceber, relatará um erro. No entanto, embora declare quais métodos você implementou, é provável que haja omissões durante a implementação
/*interface pessoas {function createhead (); function createbody ();}*/var woman = function (nome) {this.name = name; this.implementsInterfaces = ['pessoas'];} woman.prototype.showname = function () {alert (this.name);} woman.ProTyStyTy.CreateBrodyBody = () {alert (this.name);}}} (fUrmTyTyTyTyBody = functody = (ALERT (this.name);} woman.ProTyStyStyBodyBodyBody = criado ");} mulher.prototype.createhead = function () {alert (" a cabeça foi criada ");} função implement (obj, interfaces) {for (var i = 1; i <interfaces.lengthing; i ++) {var interfacename = interfaces [i]; var interfaceFound = false; j = 0; j <obj.implementsInterfaces.length; j ++) {if (obj.implementsInterfaces [j] = interfacename) {interfacefound = true; break;}} {! if (! implementar (instância, interfaces)) {lança um novo erro ("Objeto não implementa uma interface necessária");}}3. Método de identificação no estilo de pato: ( Duck não é julgado pela aparência, mas se ele tem as características de um pato. Como James Whitcomb Riley disse, aquele que anda como um pato e brigas é o pato)
Ambos os itens acima declaram que implementaram as interfaces, mas a afirmação não é importante. O núcleo da implementação da interface é que a classe implementa o conjunto de métodos da interface. Se a classe tiver funções com o mesmo nome de função de método que a interface definida, é considerado implementar a interface
// classe de interface, usada para criar interface var interface = function (nome, mariposas) {if (agruments.length! = 2) {lança um novo erro ("construtor de interface chamado com"+argumentos.Length+"argumentos, mas esperado exatamente 2");} this.name = name; this.methods = []; Mothereds [i]! == 'String') {THROW NOVO ERRO ('A interface Construtor espera que os nomes de trapaça sejam'+'que passam como uma string');} this.methods.push (Motheds [i]);}} interface.prototype.ensureImplements = function (obj)); {se "+argumentos.Length+" Argumentos, mas esperado exatamente 1 ")} para (var i = 0; i <objs.length; i ++) {var obj = objs [i]; para (var j = 0; j <this.motheds.length; 'function') {lança um novo erro ('function interface.ensureImplements: implementa interface'+this.name+', obj.mothed'+marthed+'não foi encontrado');}}}} // criar interface var peoplecl = new interface ('pessoas', 'functionhead', 'catebody'); nome; this.implementsInterfaces = ['pessoas'];} mulher.prototype.showname = function () {alert (this.name);} woman.prototype.createbrody = function () {// implementa o alerta de método necessário ("o corpo da mulher foi criado");} woman.ProTyTyTyTead.CreatEnHead = a função da mulher () foi criada "full. criado ");} // subclasse var man = function (name) {this.name = name; this.implementsInterfaces = ['pessoas'];} man.prototype.showname = function () {alert (this.name);} man.protype.create/function = function) criado ");} man.prototype.CreateHead = function () {alert (" A cabeça do homem foi criada ");} // Defenda se deve implementar Poeple.ensureImplements (['mulher', 'homem']);