在尋找如何設計一個Javascript API的時候,發現了Method Chaining這個東西,方法鏈,看起來似乎很強大,也挺有意思的,而這個東西也是過去我們常看到的。 。
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 state tocin allowing notincine allowing the statementin. ates 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 methodbreaks oremyk methodlar unydough methods ? methods.
拿翻譯工具翻譯了一下:
方法鏈,也被稱為命名參數法,是在物件導向的程式語言呼叫的呼叫多個方法的通用語法。每一個方法傳回一個對象,允許電話連接到一起,在一個單一的聲明。連結是語法糖,省去了中間變數的需要。方法鏈也被稱為火車殘骸中由於方法來相繼發生的同一行以上的方法都鎖在即使換行通常添加方法間的數量增加。
Method Chaining 使用
目測對於方法鏈用得最多的,應該就是jQuery了。
// chaining
$("#person").slideDown('slow')
.addClass('grouped')
.css('margin-left', '11px');
我們可以用這樣的用法來呼叫這個。 jQuery嚴重依賴連結。這使得它很容易調用的幾個方法相同的選擇。這也使得程式碼更清晰和防止執行相同的選擇幾次(提高效能)。沒有方法鏈的時候則是下面的樣子
var p = $('#person');
p.slideDown('slow');
p.addClass('grouped');
p.css('margin-left', '11px');
看起來和設計模式中的builder很像,不同的是,這裡的p是方法,而不是一個類別。
Javascript 方法鏈範例
在之前我們說到Javascript 高階函數 的時候,說到的print('Hello')('World'),而這種用法的結果可能會變成這樣子。
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
這是網路上的一個例子,然而也是我上一次寫鍊式呼叫的作法。看起來弱爆了。
var func = (function() {
戻る{
追加: function () {
console.log('1');
戻る{
結果: function () {
console.log('2');
}
}
}
}
})();
func.add().result();
実際、すべての関数に return this があるはずなので、次のようになります:
Func = (function() {
This.add = function(){
console.log('1');
これを返します;
};
This.result = function(){
console.log('2');
これを返します;
};
これを返してください;
});
var func = new Func();
func.add().result();
もちろん、最後の 2 つの文を置き換えることもできます
var func = new Func();
func.add().result();
になる
new Func().add().result();
その他
最後に、わかりにくい箇所として少し比較します:
メソッドチェーン VS プロトタイプチェーン
プロトタイプ チェーンとメソッド チェーンはいくつかの点で似ていますが、次のような違いがあります。
1. プロトタイプチェーンにはプロトタイプの使用が必要です
2. メソッドチェーンはメソッド
を使用します