Я недавно создал свою собственную библиотеку 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 жалуется и предупреждает, что не отправляется правильное количество параметров. Как мне это обработать?
EDIT
Я начинаю задумываться, не является ли это проблемой Idea9, потому что у jQuery такая же проблема. У меня, похоже, нет этой проблемы в других проектах.