创建一个javascript库闭包

时间:2011-03-19 22:33:01

标签: javascript closures

过去几天我一直在开发类似于Underscore.js和Jquery的JavaScript库。在这两个库中,它们使用一个可以接受参数的对象,但也可以使用它调用的方法:$(“param”)。method();或_(“param”)。method();

我一直在阅读这两个库的源代码,试图了解他们是如何实现这样的事情但却无法弄明白。我不知道这种类型的封闭的名称,所以我一直无法搜索它。

任何帮助都会受到赞赏,我只想弄清楚如何将这种类型的对象实现到我的库中。

3 个答案:

答案 0 :(得分:4)

var lib = (function (param) {

   var func = function () {
     /// your code

     return {
         animate : function () {
          // do the animation
          return this;
     }
   }

   return func;
})();

您可以使用

lib(function(){}).something();
lib("selector").something().something().something();
lib(DOMElement).something().something().something();

定义

lib.prototype={
some: function() {}
};

允许您使用

lib("foo").some();

答案 1 :(得分:3)

您只需创建一个返回具有方法的对象的函数。例如:

function test(demo) {
  return {
    show: function() { alert(demo); }
  };
}

test("Hello world").show();

答案 2 :(得分:0)

不要做任何特别的事情,只需创建一个函数并添加属性(其中一些可以是函数):

function a(){
   alert(1);
}

a.b = function(){
   alert(2);
}

现在你可以做到这两点:

a()

或:

a.b()