我决定在实现接口时需要一些东西来帮助我。所以我将这个函数添加到了闭包库中的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);
有可能吗?
答案 0 :(得分:3)
这取决于你忽略的意思。你想要它编译为零,以便它只适用于未编译的代码吗?如果是这样,您可以使用标准的@define值之一:
goog.implements = function (ctor, interfaceCtor) {
if (!COMPILED) {
...
}
};
或者,仅在启用goog.DEBUG时:
goog.implements = function (ctor, interfaceCtor) {
if (goog.DEBUG) {
...
}
};
如果这些不合适,您可以定义自己的。
或者你的意思是完全不同意?