【发布时间】:2012-05-11 22:24:46
【问题描述】:
我正在创建具有 Crockford 普遍提倡的私有/公共访问限制的对象。例如,我有这样的事情:
var foo = (function() {
var myPrivateVariable = "whatever";
return {
myPublicFunction:function(str){
return str;
}
}
}());
如果我拨打电话,比如
myPublicFunction();
闭包应该告诉我我正在调用一个参数数量错误的函数。我尝试在 myPublicFunction 上使用 JavaDoc cmets 帮助 Closure:
var foo = (function() {
var myPrivateVariable = "whatever";
return {
/**
* @param {string} str
*/
myPublicFunction:function(str){
return str;
}
}
}());
foo.myPublicFunction();
仍然没有抱怨。我已经为 foo 尝试了各种形式的 JavaDocs,唯一有效的是将其记录为记录类型:
/**
* @type {{myPublicFunction:function(string):string}}
*/
var foo = (function() {
var myPrivateVariable = "whatever";
return {
/**
* @param {string} str
*/
myPublicFunction:function(str){
return str;
}
}
}());
foo.myPublicFunction();
这行得通,但编译器并没有尝试强制 myPublic 对象函数实际匹配我在 JavaDoc 的记录字段中记录的签名。所以只要我确保在这些返回的对象中记录我的所有函数并确保我的文档中的签名与我实际返回的内容保持一致,这将起作用。我是否错过了一些更好的方法来执行此操作?
谢谢!
【问题讨论】:
-
使用 --warning_level=VERBOSE,我确实会从这段代码中得到一个警告(使用最新的闭包编译器):“函数 foo.myPublicFunction:使用 0 个参数调用。函数至少需要 1 个参数且不超过 1 个参数。”