国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript中的方法鏈(Method Chaining)介紹

2019-11-20 12:55:53
字體:
來源:轉載
供稿:網友

在尋找如何設計一個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 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.

拿翻譯工具翻譯了一下:

復制代碼 代碼如下:

方法鏈,也被稱為命名參數法,是在面向對象的編程語言調用的調用多個方法的通用語法。每一個方法返回一個對象,允許電話連接到一起,在一個單一的聲明。鏈接是語法糖,省去了中間變量的需要。方法鏈也被稱為火車殘骸中由于方法來相繼發生的同一行以上的方法都鎖在即使換行通常添加方法間的數量增加。

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() {
    return{
        add: function () {
            console.log('1');
            return{
                result: function () {
                    console.log('2');
                }
            }
        }
    }
})();

func.add().result();


實際上應該在每個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();


當然我們也可以將最后的兩句
復制代碼 代碼如下:

var func = new Func();
func.add().result();

變成
復制代碼 代碼如下:

new Func().add().result();

其他

最后作為一個迷惑的地方的小比較:

Method Chaining VS prototype Chaining

原型鏈與方法鏈在某些方面上是差不多的,不同的地方或許在于

1.原型鏈是需要用原型
2.方法鏈則是用方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沂水县| 山东| 东源县| 武夷山市| 从江县| 炎陵县| 桓台县| 南康市| 泸溪县| 锡林郭勒盟| 临安市| 隆回县| 英山县| 井陉县| 香格里拉县| 舒兰市| 育儿| 土默特右旗| 广灵县| 泸州市| 云霄县| 布拖县| 新源县| 玉田县| 大庆市| 凤城市| 盖州市| 来凤县| 遵义市| 象山县| 红原县| 丹凤县| 锦州市| 平潭县| 红河县| 渭源县| 马公市| 永清县| 庄浪县| 涪陵区| 德化县|