我寫一些代碼,發現jQuery有一個非常酷的功能如何創建多個jQuery函數
例如:
$(selector).addClass('').on('').on ('').remove();
我能做到這一點2.
func(...).func2('');
想知道如何做到這一點(我想我沒有解釋正確)。
這傢伙也有benchmarkjs它。 http://benchmarkjs.com/
如果有人能幫助我會很棒!謝謝你在前進
我寫一些代碼,發現jQuery有一個非常酷的功能如何創建多個jQuery函數
例如:
$(selector).addClass('').on('').on ('').remove();
我能做到這一點2.
func(...).func2('');
想知道如何做到這一點(我想我沒有解釋正確)。
這傢伙也有benchmarkjs它。 http://benchmarkjs.com/
如果有人能幫助我會很棒!謝謝你在前進
簡單地返回自己在每一個功能:
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;
}
}
關鍵是始終返回每個方法上的對象(讀取上下文)。最簡單的例子:
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
可以在函數的開始處立即給出線索,而不必追蹤函數的返回值。
請閱讀JavaScript中的「流暢接口」,「鏈接」和可能的「原型」。有關這些主題的在線信息很多。 – elclanrs
你的問題到底是什麼?任何返回帶有方法的對象的函數或方法都可以像jQuery一樣鏈接。第一個函數被調用,它返回一個對象,你可以通過鏈接調用方法等等。對於大多數方法來說,jQuery有一個約定來返回原始的jQuery對象,這意味着你可以通過鏈接在同一個jQuery對象上調用多個方法。 – jfriend00