我最近制作了自己的 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 似乎没有抱怨。我尝试对我的库做同样的事情,其中一个函数可以接受 0 个参数或 1 个参数。但是,IDE 会抱怨并警告未发送正确数量的参数。我该如何处理?
编辑
我开始怀疑这是否是一个 Idea9 问题,因为 jQuery 也有同样的问题。不过,我在其他项目中似乎没有这个问题。