인터페이스: 특정 작업, 기능, 목적 등을 실현하기 위해 규정된 몇 가지 원칙입니다.
프로그램의 인터페이스: 메소드 수와 메소드 이름을 지정합니다. (프로그램에서 완료해야 할 작업은 모두 함수나 메소드를 통해 구현되기 때문입니다.)
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] !== 'string'){ 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] !== 'function'){ 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 중국어 홈페이지를 주목해주세요!