>  기사  >  웹 프론트엔드  >  자바스크립트 객체지향 인터페이스

자바스크립트 객체지향 인터페이스

高洛峰
高洛峰원래의
2017-01-04 09:02:59941검색

인터페이스: 특정 작업, 기능, 목적 등을 실현하기 위해 규정된 몇 가지 원칙입니다.

프로그램의 인터페이스: 메소드 수와 메소드 이름을 지정합니다. (프로그램에서 완료해야 할 작업은 모두 함수나 메소드를 통해 구현되기 때문입니다.)

JavaScript의 인터페이스: 인스턴스의 특정 "타입 개체"와 인스턴스의 "인터페이스 개체"를 결합한 후 비교하고 규칙을 준수하면 다음과 같이 말할 수 있습니다. 이 개체는 지정된 인터페이스를 구현합니다.

(인터페이스 클래스: 이 클래스를 통해 다양한 인터페이스가 인스턴스화됩니다. 즉, 다른 인터페이스 인스턴스입니다. , 메소드의 개수와 메소드 이름이 다름)

(비교: 서브타입 인스턴스의 객체가 인터페이스 객체에 저장된 메소드 이름과 번호가 같은지 확인하는 것이 본질이다.)

작은 예:

"전화", "휴대 전화", "태블릿 전화" 등과 같은 하위 카테고리가 있을 수 있는 전화 카테고리. 그리고 이러한 하위 클래스는 모두 공통된 작업, 기능 또는 목적을 가지고 있습니다---[전화 걸기]

이 기능을 실현하기 위해 서로 다른 하위 클래스는 서로 다른 내부 구현 방법을 가질 수 있으므로 이 전화가 연결될 수 있습니다. 하지만 이제 사용자를 위해 다음과 같은 규정을 만들어야 합니다.

어떤 하위 유형이든 인스턴스화하는 객체, 즉 전화 기능이 있는 객체는 [전화 걸기]를 구현하기 위해 두 가지가 있어야 합니다. 전화]

방법은 다음과 같습니다. 1. 전화번호(숫자 키)를 누릅니다. 2. 다이얼 키를 누릅니다.

다음은 고정된 디자인 패턴입니다.

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"); 
   } 
  } 
 } 
};

다음은 예시입니다

//通过接口类,实例出一个"拔通电话"的接口;现在这个接口对象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();


더 많은 Javascript 객체지향 인터페이스 관련 글은 PHP 중국어 홈페이지를 주목해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.