interface FormItem {
function save()
}
*/
var CompositeForm = function(id, method, action) {
this.implementsInterfaces = ['Composite', 'FormItem'];
...
}
...
function addForm(formInstance) {
if(!implements(formInstance) , 'Composite', 'FormItem' )) {
throw new Error("개체가 필수 인터페이스를 구현하지 않습니다.")
}
...
}
// 개체가
// 필요한 인터페이스를 구현한다고 선언하는지 확인하는 함수를 구현합니다.
function Implements(object) {
for(var i = 1; i
var interfaceName = 인수[i]
var interfaceFound =
for(var j = 0; j < object.implementsInterfaces.length; j ) {
if(object.implementsInterfaces[j] == 인터페이스 이름) {
interfaceFound =
break;
}
if(!interfaceFound) {
return false; // 인터페이스를 찾지 못했습니다.
}
}
return true;
}
이 메소드를 사용하면 프로그래머는 작성할 때 어떤 인터페이스가 구현되는지 표시할 수 있습니다. this.implementsInterfaces = ['Composite', 'FormItem']; 호출할 때 Implements 메소드를 사용하여 구현 가능 여부를 확인합니다. 구현이 'Composite' 인터페이스로 작성되었을 가능성이 높지만 코드에 add 메소드가 없습니다. 따라서 인터페이스를 구현하는 클래스에 인터페이스의 메소드가 포함되어 있는지 확인해야 합니다! 따라서 인터페이스에는 주석이 없어야 합니다.
코드 복사
코드는 다음과 같습니다.
...
코드는 다음과 같습니다.
// Constructor.
"문자열로 전달될 것으로 예상합니다.")
}
this.methods.push(methods[i]); }
};
为인터페이스 添加建议接口是否实现적静态방법
// 건설자.
Interface.ensureImplements = function(object) {
if(arguments.length < 2) {
새 Error("Function Interface.ensureImplements가 "
arguments.length "인수로 호출되었지만, 그러나 최소 2개 이상 예상됩니다.");
}
for(var i = 1, len = 인수.길이; i < len; i ) {
var 인터페이스 = 인수[i];
if(interface.constructor !== Interface) {
throw new Error("Function Interface.ensureImplements는 인수를 기대합니다."
"두 개 이상은 인터페이스의 인스턴스입니다.");
}
for(var j = 0, 메소드 Len = 인터페이스.메소드.길이; j < 메소드Len; j ) {
var 메소드 = 인터페이스.메소드[j];
if(!object[method] || typeof object[method] !== 'function') {
throw new Error("Function Interface.ensureImplements: object "
"는 " 인터페이스를 구현하지 않습니다. .name
" 인터페이스. 메소드 " 메소드 "를 찾을 수 없습니다.");
}
}
}
};