1

인터페이스를 구현하는 동안 약간의 도움이 필요하다고 결정했습니다. 그래서이 함수를 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?

+0

왜 AO를 사용하여 프로덕션 빌드를 실행하고 컴파일러에서 사용자에게 피드백을 제공하지 않는가? – lennel

+0

AO가 불필요한 코드를 완전히 제거하고 싶습니다. – Ally

답변

3

그것은 무시의 의미에 따라 다릅니다. 컴파일되지 않은 코드에서만 작동하도록 아무 것도 컴파일하지 않겠습니까? 그렇다면, 당신은 표준 @define 값 중 하나를 사용할 수 있습니다

goog.implements = function (ctor, interfaceCtor) { 
    if (!COMPILED) { 
    ... 
    } 
}; 

또는 교대를 goog.DEBUG이 활성화 된 경우에만 :

goog.implements = function (ctor, interfaceCtor) { 
    if (goog.DEBUG) { 
    ... 
    } 
}; 

이 경우는 자신을 정의 할 수 있습니다 맞지 않는 .

아니면 완전히 다른 것을 의미합니까?

+0

이것은 트릭을 할 것이고, 컴파일 된 시점에 루핑과 다른 코드를 실행하지 않은 직후였습니다. 사용자의 속도를 약간 높입니다. 감사. – Ally

+0

위대하고 기꺼이 도와주세요. – John