인터페이스를 구현하는 동안 약간의 도움이 필요하다고 결정했습니다. 그래서이 함수를 closure 라이브러리의 base.js 파일에 추가했습니다.코드를 무시하도록 클로저 컴파일러에게 어떻게 말합니까?
/**
* Throws an error if the contructor does not implement all the methods from
* the interface constructor.
*
* @param {Function} ctor Child class.
* @param {Function} interfaceCtor class.
*/
goog.implements = function (ctor, interfaceCtor) {
if (! (ctor && interfaceCtor))
throw "Constructor not supplied, are you missing a require?";
window.setTimeout(function(){
// Wait until current code block has executed, this is so
// we can declare implements under the constructor, for readability,
// before the methods have been declared.
for (var method in interfaceCtor.prototype) {
if (interfaceCtor.prototype.hasOwnProperty(method)
&& ctor.prototype[method] == undefined) {
throw "Constructor does not implement interface";
}
}
}, 4);
};
내 클래스가 인터페이스를 구현하지만 모든 인터페이스의 메소드를 구현하지 않는다고 선언하면이 함수는 오류를 발생시킵니다. 이것은 최종 사용자의 관점에서 볼 때 전혀 이득이 아닙니다. 개발자를 돕기위한 훌륭한 추가 사항입니다. 결과적으로 클로저 컴파일러에게 아래 라인을 보았을 때 그것을 무시하도록 어떻게해야합니까?
goog.implements(myClass, fooInterface);
is is possible?
왜 AO를 사용하여 프로덕션 빌드를 실행하고 컴파일러에서 사용자에게 피드백을 제공하지 않는가? – lennel
AO가 불필요한 코드를 완전히 제거하고 싶습니다. – Ally