我一直在开发一个JavaScript库,类似于Underscore.js和Jquery在过去几天。在这两个库中,他们使用一个可以接受参数的对象,但也可以调用方法:$(“param”)。method();或_(“param”)。method();创建JavaScript库关闭
我一直在阅读这些库上的源代码,试图了解他们如何实现这样的事情,但一直无法弄清楚。我不知道这种封闭类型的名称,所以我一直无法搜索它。
任何帮助将不胜感激,我只是想弄清楚如何我可以实现这种类型的对象到我的图书馆。
我一直在开发一个JavaScript库,类似于Underscore.js和Jquery在过去几天。在这两个库中,他们使用一个可以接受参数的对象,但也可以调用方法:$(“param”)。method();或_(“param”)。method();创建JavaScript库关闭
我一直在阅读这些库上的源代码,试图了解他们如何实现这样的事情,但一直无法弄清楚。我不知道这种封闭类型的名称,所以我一直无法搜索它。
任何帮助将不胜感激,我只是想弄清楚如何我可以实现这种类型的对象到我的图书馆。
你只是做一个函数返回一个具有方法的对象。例如:
function test(demo) {
return {
show: function() { alert(demo); }
};
}
test("Hello world").show();
不要做什么特别的,只是做一个功能,并添加属性(其中有些可以是函数):
function a(){
alert(1);
}
a.b = function(){
alert(2);
}
现在你可以做两个:
a()
或:
a.b()
虽然我不能访问发送到a()函数中的参数。 – 2011-03-19 22:52:32
@伊法瑞尔:对不起,误解了这个问题。 – fdreger 2011-03-19 23:07:06
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();
谢谢,非常有帮助... – 2011-08-31 16:59:55
真棒!如果没有方法被调用,有没有办法让'test'返回一个特定的值而不是方法对象字面值?我试过用旗子做一些事情,但没有运气。我需要的是:test(“param”)。method1(“edit param”)。method2(“return param”) – 2011-03-19 23:44:28