Javascript中的方法鏈(Method Chaining)介紹
在尋找如何設(shè)計一個Javascript API的時候,發(fā)現(xiàn)了Method Chaining這個東西,方法鏈,看上去似乎很強大,也挺有意思的,而這個東西也是過去我們經(jīng)??吹降?。。
Javascript Method Chaining
在維基百科上有這樣的解釋:
Method chaining, also known as named parameter idiom, is a common syntax for invoking multiple method calls in object-oriented programming languages. Each method returns an object, allowing the calls to be chained together in a single statement.Chaining is syntactic sugar which eliminates the need for intermediate variables. A method chain is also known as a train wreck due to the increase in the number of methods that come one after another in the same line that occurs as more methods are chained togethe even though line breaks are often added between methods.
拿翻譯工具翻譯了一下:
方法鏈,也被稱為命名參數(shù)法,是在面向?qū)ο蟮木幊陶Z言調(diào)用的調(diào)用多個方法的通用語法。每一個方法返回一個對象,允許電話連接到一起,在一個單一的聲明。鏈接是語法糖,省去了中間變量的需要。方法鏈也被稱為火車殘骸中由于方法來相繼發(fā)生的同一行以上的方法都鎖在即使換行通常添加方法間的數(shù)量增加。
Method Chaining 使用
目測對于方法鏈用得最多的,應(yīng)該就是jQuery了。
// chaining
$("#person").slideDown('slow')
.addClass('grouped')
.css('margin-left', '11px');
我們可以用這樣的用法來調(diào)用這個。jQuery嚴(yán)重依賴于鏈接。這使得它很容易調(diào)用的幾個方法相同的選擇。這也使得代碼更清晰和防止執(zhí)行相同的選擇幾次(提高性能)。沒有方法鏈的時候則是下面的樣子
var p = $('#person');
p.slideDown('slow');
p.addClass('grouped');
p.css('margin-left', '11px');
看上去和設(shè)計模式中的builder很像,不同的是,這里的p是方法,而不是一個類。
Javascript 方法鏈?zhǔn)纠?/strong>
在之前我們說到Javascript 高階函數(shù) 的時候,說到的print('Hello')('World'),而這種用法的結(jié)果可能會變成這樣子。
function f(i){
return function(e){
i+=e;
return function(e){
i+=e;
return function(e){
alert(i+e);
};
};
};
};
f(1)(2)(3)(4); //10
這是網(wǎng)上的一個例子,然而也是我上一次寫鏈?zhǔn)秸{(diào)用的作法??瓷先ト醣?。
var func = (function() {
return{
add: function () {
console.log('1');
return{
result: function () {
console.log('2');
}
}
}
}
})();
func.add().result();
實際上應(yīng)該在每個function都要有個return this,于是就有了:
Func = (function() {
this.add = function(){
console.log('1');
return this;
};
this.result = function(){
console.log('2');
return this;
};
return this;
});
var func = new Func();
func.add().result();
當(dāng)然我們也可以將最后的兩句
var func = new Func();
func.add().result();
變成
new Func().add().result();
其他
最后作為一個迷惑的地方的小比較:
Method Chaining VS prototype Chaining
原型鏈與方法鏈在某些方面上是差不多的,不同的地方或許在于
1.原型鏈?zhǔn)切枰迷?br /> 2.方法鏈則是用方法
相關(guān)文章
JS監(jiān)聽和響應(yīng)DOM元素的變化的方法
在前端開發(fā)中,處理動態(tài)變化的 DOM(文檔對象模型)很是常見的需求,比如自動化測試中,可能需要監(jiān)控 DOM 變化來驗證測試條件,在用戶填寫表單時,某些字段需要即時驗證等,所以本文給大家介紹了JS監(jiān)聽和響應(yīng)DOM元素的變化的方法,需要的朋友可以參考下2024-09-09
通過V8源碼看一個關(guān)于JS數(shù)組排序的詭異問題
一直在學(xué)習(xí)C++,也想閱讀點開源的C++項目,發(fā)現(xiàn)網(wǎng)上對Google V8評價不錯,于是上Github上找到了源代碼,但在學(xué)習(xí)中遇到一個js數(shù)組排序的問題,下面這篇文章主要給大家介紹了通過V8源碼說說一個關(guān)于JS數(shù)組排序的詭異問題的相關(guān)資料,需要的朋友可以參考下。2017-08-08
詳解如何在微信小程序開發(fā)中正確的使用vant ui組件
這篇文章主要介紹了詳解如何在微信小程序開發(fā)中正確的使用vant ui組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
微信小程序?qū)崿F(xiàn)打開并下載服務(wù)器上面的pdf文件到手機
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)打開并下載服務(wù)器上面的pdf文件到手機,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09
轉(zhuǎn)換layUI的數(shù)據(jù)表格中的日期格式方法
今天小編就為大家分享一篇轉(zhuǎn)換layUI的數(shù)據(jù)表格中的日期格式方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09

