创建javascript库闭包

创建javascript库闭包,javascript,closures,Javascript,Closures,在过去的几天里,我一直在开发一个类似于下划线.js和Jquery的JavaScript库。在这两个库中,它们都使用一个对象,该对象可以接受参数,但也可以对其调用方法:$(“param”).method();或uu(“param”).method() 我一直在阅读这两个库的源代码,试图理解它们是如何实现这样一个东西的,但一直无法理解。我不知道这种类型的闭包的名称,所以我无法搜索它 如果您能提供任何帮助,我将不胜感激,我只是想弄清楚如何将这种类型的对象实现到我的库中。您只需创建一个函数,返回一个具有

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

我一直在阅读这两个库的源代码,试图理解它们是如何实现这样一个东西的,但一直无法理解。我不知道这种类型的闭包的名称,所以我无法搜索它


如果您能提供任何帮助,我将不胜感激,我只是想弄清楚如何将这种类型的对象实现到我的库中。

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

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

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

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

现在,您可以同时执行以下两项操作:

a()
或:

你可以用

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

lib.prototype={
some: function() {}
};
允许您使用

lib("foo").some();

但是,我无法从方法中访问发送到a()函数的参数。@Ian Farrell:对不起,误解了这个问题。太棒了!如果没有对“test”调用方法,是否有方法让它返回某个值而不是methods对象文本?我试过用旗子做一些事情,但运气不好。我需要的是:test(“param”).method1(“edit param”).method2(“return param”)
lib(function(){}).something();
lib("selector").something().something().something();
lib(DOMElement).something().something().something();
lib.prototype={
some: function() {}
};
lib("foo").some();