프로그램의 인터페이스: 메소드 수와 메소드 이름을 지정하십시오. (프로그램에서 완료해야 할 작업은 모두 함수나 메소드를 통해 구현되기 때문입니다.)
JavaScript의 인터페이스: 인스턴스에서 나오는 특정 "타입 개체"와 나오는 "인터페이스 개체" 인스턴스 밖에서 비교하고 규칙을 준수하면 다음과 같이 말할 수 있습니다.
(인터페이스 클래스: 이 클래스를 통해 다양한 인터페이스가 인스턴스화됩니다. 즉, 다른 인터페이스 즉, 메소드 개수와 메소드 이름이 다름)
(비교: 서브타입 인스턴스의 객체가 인터페이스 객체에 저장된 메소드 이름과 숫자가 같은지 판별하는 것이 본질이다.)
작음 예:
전화 카테고리에는 "전화", "휴대폰", "태블릿폰" 등과 같은 하위 카테고리가 있을 수 있습니다. 그리고 이러한 하위 클래스는 모두 공통된 작업, 기능 또는 목적을 가지고 있습니다---[전화 걸기]
이 기능을 실현하기 위해 서로 다른 하위 클래스는 전화가 풀 수 있도록 서로 다른 내부 구현 방법을 가질 수 있습니다. 하지만 이제 사용자를 위해 다음과 같은 조항이 있어야 합니다.
어떤 하위 유형이든 인스턴스화하는 개체, 즉 전화 기능이 있는 개체에는 [전화 걸기]를 구현하기 위한 두 가지 방법이 있어야 합니다. ,
즉, 1. 전화번호(숫자 키)를 누릅니다. 2. 다이얼 키를 누릅니다.
다음은 고정된 디자인 패턴입니다.
var Interface = function(name,methods){
if(arguments.length != 2){
새 오류 발생("arguments.length "인수를 사용하여 호출했지만 정확히 2개로 예상됨.")
this.name = name; 🎜>for(var i = 0,len = 메소드.길이; i if(typeof 메소드[i] !== 'string'){
throw new Error("The 인터페이스 메소드의 이름은 문자열이어야 합니다.");
}
this.methods.push(methods[i]);
}
};
//Static 클래스 Method
Interface.ensureImplements = function( myobject1,Iobject1){
if(arguments.length!=2){
throw new Error("Method Interface.ensureImplemnents가 "args.length " 매개변수를 지정했지만 2가 예상됩니다." );
}
for(var i=1,len =args.length; ivar _interface = 인수[i]
//인터페이스 객체 class 인스턴스가 나옵니다
if(_interface.constructor !== Interface){
throw new Error("인터페이스 클래스를 통해 인터페이스가 생성되지 않았습니다. 인스턴스가 나옵니다.")
}
//인터페이스 객체를 안에 넣습니다. 이 예제에서는 메소드 이름을 꺼내서 휴대폰 객체와 결합하여 휴대폰 객체에 이 두 가지 메소드가 있는지, 메소드 이름이 동일한지 확인합니다.
for(var; j=0,methodsLen = _interface.methods.length; jvar method = _interface.methods[j]
if(!myobject1[method]||typeof myobject1[method] ! == 'function'){
throw new Error("통과 확인 함수: Interface.ensureImplements: " myobject1.name "객체 메서드 " method "를 찾을 수 없거나 함수가 아닙니다.")
}
}
}
} ;
다음은 예시입니다
코드 복사
코드는 다음과 같습니다. //인터페이스 클래스를 통해 "호출하기"를 위한 인터페이스를 인스턴스화합니다. 이제 이 인터페이스 개체 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("key");
},
//동일해야 합니다. 이전 인터페이스 객체에 지정된 메서드 이름
"callnum" : function(){
document.write("Dial")
}
}
//삼성 모바일 인스턴스화 휴대폰 클래스를 통한 전화 개체
var anycall = new mobilepone("anycall")
//이 삼성 휴대폰 개체가 [전화 걸기] 인터페이스를 구현하는지 확인합니다. 즉, 삼성 휴대폰을 전달합니다. 객체와 인터페이스 객체를 비교를 위해 검증 함수에 매개변수로 추가
Interface.ensureImplements( anycall,testInterface)
anycall.callnum()