我一直在開發一個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