我最近做了一个自己的JavaScript库,最初我使用了以下模式:
var myLibrary = (function () {
var someProp = "...";
function someFunc() {
...
}
function someFunc2() {
...
}
return {
func: someFunc,
fun2: someFunc2,
prop: someProp;
}
}());
这个问题在于我无法使用代码自动完成,因为IDE不知道函数字面量返回的属性(我正在使用IntelliJ IDEA 9)。我查看了jQuery代码并尝试了以下操作:
(function(window, undefined) {
var myLibrary = (function () {
var someProp = "...";
function someFunc() {
...
}
function someFunc2() {
...
}
return {
func: someFunc,
fun2: someFunc2,
prop: someProp;
}
}());
window.myLibrary = myLibrary;
}(window));
我试过这个方法,但现在我遇到了另一个问题。IDE也无法识别
myLibrary
。我现在解决问题的方式是这样的:
var myLibrary = {
func: function() { },
func2: function() { },
prop: ""
};
myLibrary = (function () {
var someProp = "...";
function someFunc() {
...
}
function someFunc2() {
...
}
return {
func: someFunc,
fun2: someFunc2,
prop: someProp;
}
}());
但这种方法似乎有些笨拙,而且我无法确切地弄清楚jQuery是如何做到的。我还有一个问题是如何处理具有任意数量参数的函数。
例如,jQuery.bind
可以使用2个或3个参数,但IDE似乎没有抱怨。我尝试在我的库中做同样的事情,其中一个函数可以不带参数或带一个参数。然而,IDE会抱怨并警告说没有发送正确数量的参数。我该如何处理这个问题?
编辑
我开始怀疑这可能是Idea9的问题,因为jQuery也有同样的问题。不过,在其他项目中我好像没有这个问题。