过去几天我一直在开发类似于Underscore.js和Jquery的JavaScript库。在这两个库中,它们使用一个可以接受参数的对象,但也可以使用它调用的方法:$(“param”)。method();或_(“param”)。method();
我一直在阅读这两个库的源代码,试图了解他们是如何实现这样的事情但却无法弄明白。我不知道这种类型的封闭的名称,所以我一直无法搜索它。
任何帮助都会受到赞赏,我只想弄清楚如何将这种类型的对象实现到我的库中。
答案 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()