2014-01-06 59 views
-1

我寫一些代碼,發現jQuery有一個非常酷的功能如何創建多個jQuery函數

例如:

$(selector).addClass('').on('').on ('').remove(); 

我能做到這一點2.

func(...).func2(''); 

想知道如何做到這一點(我想我沒有解釋正確)。

這傢伙也有benchmarkjs它。 http://benchmarkjs.com/

如果有人能幫助我會很棒!謝謝你在前進

+2

請閱讀JavaScript中的「流暢接口」,「鏈接」和可能的「原型」。有關這些主題的在線信息很多。 – elclanrs

+1

你的問題到底是什麼?任何返回帶有方法的對象的函數或方法都可以像jQuery一樣鏈接。第一個函數被調用,它返回一個對象,你可以通過鏈接調用方法等等。對於大多數方法來說,jQuery有一個約定來返回原始的jQuery對象,這意味着你可以通過鏈接在同一個jQuery對象上調用多個方法。 – jfriend00

回答

1

簡單地返回自己在每一個功能:

YourClass.prototype.a = function() { 
    // do a stuff 
    return this; 
}; 
YourClass.prototype.a = function() { 
    // do b stuff 
    return this; 
}; 

new YourClass().a().b(); 

In the comments,你說:

jQuery中,如果我請求HTML($()HTML()),它返回線程和仍然有效

嗯,這很容易,以及:

YourClass.prototype.html = function(val) { 
    if (val === undefined) { 
     // return the html 
    } else { 
     // set the html to val 
     return this; 
    } 
} 
+0

我試過這個,但它沒有起作用,看來第二個函數不存在 –

+1

@IagoBruno到底你究竟做了什麼?你可以發表小提琴嗎? – Doorknob

+1

您是否創建了構造函數? – elclanrs

1

關鍵是始終返回每個方法上的對象(讀取上下文)。最簡單的例子:

var lib = { 
    a: function() { 
    //... 
    return this; 
    }, 
    b: function() { 
    //... 
    return this; 
    } 
}; 

而且使用它像:

lib.a().b(); 

但由於這是這樣做的一個常見的事,以流暢的接口的方法是fluent裝飾:

// A fluent function decorator: 
// Takes a function and returns a function that returns `this` 
var fluent = function(f) { 
    return function() { 
    f.apply(this, arguments); 
    return this; 
    }; 
}; 

var lib = { 
    a: fluent(function() { 
    //... 
    }), 
    b: fluent(function() { 
    //... 
    }) 
}; 

lib.a().b(); 

prototypes另一種方法,使用相同的幫手:

function Lib() {} // constructor 
Lib.prototype.a = fluent(function() { 
    //... 
}); 
Lib.prototype.b = fluent(function() { 
    //... 
}); 

new Lib().a().b(); 

裝飾器fluent可以在函數的開始處立即給出線索,而不必追蹤函數的返回值。