2011-03-19 57 views
3

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

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

任何帮助将不胜感激,我只是想弄清楚如何我可以实现这种类型的对象到我的图书馆。

回答

3

你只是做一个函数返回一个具有方法的对象。例如:

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

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

真棒!如果没有方法被调用,有没有办法让'test'返回一个特定的值而不是方法对象字面值?我试过用旗子做一些事情,但没有运气。我需要的是:test(“param”)。method1(“edit param”)。method2(“return param”) – 2011-03-19 23:44:28

0

不要做什么特别的,只是做一个功能,并添加属性(其中有些可以是函数):

function a(){ 
    alert(1); 
} 

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

现在你可以做两个:

a() 

或:

a.b() 
+0

虽然我不能访问发送到a()函数中的参数。 – 2011-03-19 22:52:32

+0

@伊法瑞尔:对不起,误解了这个问题。 – fdreger 2011-03-19 23:07:06

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

谢谢,非常有帮助... – 2011-08-31 16:59:55