Heim  >  Artikel  >  Web-Frontend  >  Objektorientierte Javascript-Schnittstelle

Objektorientierte Javascript-Schnittstelle

高洛峰
高洛峰Original
2017-01-04 09:02:59984Durchsuche

Schnittstelle: Einige Grundsätze, die für die Umsetzung einer bestimmten Aufgabe, Funktion, eines bestimmten Zwecks usw. festgelegt sind.

Schnittstelle im Programm: Geben Sie an, wie viele Methoden es gibt und wie die Methodennamen lauten. (Da die im Programm auszuführenden Aufgaben alle durch Funktionen oder Methoden implementiert werden.)

Schnittstelle in JavaScript: Kombinieren Sie ein bestimmtes „Typobjekt“ aus der Instanz und das „Schnittstellenobjekt“ aus der Instanz After Wenn man einen Vergleich durchführt und die Regeln einhält, kann man sagen: Dieses Objekt implementiert die angegebene Schnittstelle

(Schnittstellenklasse: Durch diese Klasse werden verschiedene Schnittstellen instanziiert. Das heißt, unterschiedliche Schnittstelleninstanzen , unterschiedliche Anzahl von Methoden und Methodennamen)

(Vergleich: Das Wesentliche besteht darin, festzustellen, ob das Objekt aus der Subtypinstanz den im Schnittstellenobjekt gespeicherten Methodennamen und die Nummer hat.)

Kleines Beispiel:

Telefonkategorie, unter der es Unterkategorien wie „Telefon“, „Handy“, „Tablet-Telefon“ usw. geben kann. Und diese Unterklassen haben alle eine gemeinsame Aufgabe, Funktion oder einen gemeinsamen Zweck: [Wählen Sie das Telefon]

Um diese Funktion zu realisieren, können verschiedene Unterklassen unterschiedliche interne Implementierungsmethoden haben, sodass dieses Telefon verbunden werden kann. Im Interesse der Benutzer muss jedoch Folgendes festgelegt werden:

Unabhängig davon, welcher Subtyp Sie sind, muss das Objekt, das Sie instanziieren, dh das Objekt mit der Telefonfunktion, zwei Dinge implementieren müssen [Wählen das Telefon] Eine Methode,

Das heißt: 1. Drücken Sie die Telefonnummer (Zifferntaste) 2. Drücken Sie die Wähltaste

Das Folgende ist ein festes Designmuster:

var Interface = function(name,methods){ 
 if(arguments.length != 2){ 
  throw new Error("Interface constructor called with" + arguments.length + "arguments, but expected exactly 2."); 
 } 
 this.name = name; 
 this.methods = []; 
 for(var i = 0,len = methods.length; i <len; i++){ 
  if(typeof methods[i] !== &#39;string&#39;){ 
   throw new Error("接口方法的名称必须是一个字符串"); 
  } 
  this.methods.push(methods[i]); 
 } 
}; 
//Static class Method 
Interface.ensureImplements = function(myobject1,Iobject1){ 
 if(arguments.length!=2){ 
  throw new Error("方法 Interface.ensureImplemnents 指定了" + arguments.length+ "个参数,但是期望的是2个 ."); 
 } 
 for(var i=1,len = arguments.length; i<len; i++){ 
  var _interface = arguments[i]; 
  //接口对象,要通过接口类实例出来
  if(_interface.constructor !== Interface){ 
   throw new Error("接口,不是通过Interface类,实例出来的"); 
  } 
  //把接口对象里面的方法名取出来,结合到本例中的手机对象,来验证,该手机对象是否有这两个方法,且方法名是不是一样;
  for(var j=0, methodsLen = _interface.methods.length; j<methodsLen;j++ ){ 
   var method = _interface.methods[j]; 
   if(!myobject1[method]||typeof myobject1[method] !== &#39;function&#39;){ 
    throw new Error("通过验证函数:Interface.ensureImplements: "+myobject1.name+"对象的方法"+ method + " 找不到或者不是一个Function"); 
   } 
  } 
 } 
};

Das Folgende ist ein Beispiel

//通过接口类,实例出一个"拔通电话"的接口;现在这个接口对象testInterface,规定了二个方法,且方法名字是"callfun"和"callnum"
var testInterface = new Interface("call",["callfun","callnum"]);
//移动电话类,的构造函数;
var mobilepone = function(call){ 
 this.name = call;
}
//移动电话类的公有方法
mobilepone.prototype = {
 "constructor":mobilepone,
 //必须和前面接口对象规定的方法名一样;
 "callfun" : function(){
  document.write("按键");
 },
 //必须和前面接口对象规定的方法名一样
 "callnum" : function(){
  document.write("拔号");
 }
}
//通过移动电话类,实例一个三星的手机对象
var anycall = new mobilepone("anycall");
//检测这个个三星的手机对象,是否实现了[拔通电话]这个接口;即把三星手机对象和接口对象做为参数传入验证函数,进行比较
Interface.ensureImplements(anycall,testInterface);
anycall.callnum();


Weitere Artikel zu objektorientierten Javascript-Schnittstellen finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn