Writing a Javascript library that is code-completion and code-inspection friendly
        Posted  
        
            by Vivin Paliath
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Vivin Paliath
        
        
        
        Published on 2010-04-01T22:15:30Z
        Indexed on 
            2010/04/02
            1:33 UTC
        
        
        Read the original article
        Hit count: 1005
        
JavaScript
|javascript-framework
|javascript-library
|code-completion
|code-inspection
I recently made my own Javascript library and I initially used the following pattern:
var myLibrary = (function () {
  var someProp = "...";
  function someFunc() {
    ...
  }
  function someFunc2() {
    ...
  }
  return {
     func: someFunc,
     fun2: someFunc2,
     prop: someProp;
  }
}());
The problem with this is that I can't really use code completion because the IDE doesn't know about the properties that the function literal is returning (I'm using IntelliJ IDEA 9 by the way).
I've looked at jQuery code and tried to do this:
(function(window, undefined) {
    var myLibrary = (function () {
      var someProp = "...";
      function someFunc() {
        ...
      }
      function someFunc2() {
        ...
      }
      return {
         func: someFunc,
         fun2: someFunc2,
         prop: someProp;
      }
    }());
    window.myLibrary = myLibrary;
}(window));
I tried this, but now I have a different problem. The IDE doesn't really pick up on myLibrary either.
The way I'm solving the problem now is this way:
var myLibrary = {
   func: function() { },
   func2: function() { },
   prop: ""
};
myLibrary = (function () {
  var someProp = "...";
  function someFunc() {
    ...
  }
  function someFunc2() {
    ...
  }
  return {
     func: someFunc,
     fun2: someFunc2,
     prop: someProp;
  }
}());
But that seems kinda clunky, and I can't exactly figure out how jQuery is doing it. Another question I have is how to handle functions with arbitrary numbers of parameters.
For example, jQuery.bind can take 2 or 3 parameters, and the IDE doesn't seem to complain. I tried to do the same thing with my library, where a function could take 0 arguments or 1 argument. However, the IDE complains and warns that the correct number of parameters aren't being sent in. How do I handle this?
© Stack Overflow or respective owner