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

首頁 > 語言 > JavaScript > 正文

Javasript設計模式之鏈式調用詳解

2024-05-06 15:34:50
字體:
來源:轉載
供稿:網友

本文實例為大家分享了js設計模式之鏈式調用的具體代碼,供大家參考,具體內容如下

寫過jquery的可能都知道,jquery里面可以很方便的使用以下代碼:

// 不使用鏈式調用const element = $(ele);element.addClass('red');element.removeClass('green');element.show();// 鏈式調用$(ele) .addClass('red') .removeClass('green') .show();

而jquery這種調用方式就是鏈式調用。我們可以從上述代碼看出來,如果不使用鏈式調用的話,那么我們會增加很多重復的代碼,而且特別冗余。而通過鏈式調用,我們可以節省很多代碼,并且代碼看起來更加優雅和整潔。那么,接下來,我們來討論下如何實現一個支持鏈式調用的庫。

了解過原型鏈的人都知道,由構造函數生成的實例都可以訪問其原型對象的屬性和方法,因此,我們讓定義在原型對象的方法最后都返回this(調用該方法的實例),就可以對原型方法進行鏈式調用。

// 通過立即執行函數,聲明了一個_$函數,并且將一個$函數掛載到window上,并且每次調用$()的時候,返回的其實是個_$實例,由于原型對象方法里,執行最后都會返回一個this,因此就可以執行鏈式調用。(function () { // 構造函數 function _$(selector) {  // ... } _$.prototype = {  addClass: function (className) {   // ...   return this;  },  removeClass: function (className) {   // ...   return this;  },  show: function () {   // ...   return this;  } }; _$.prototype.constructor = _$; // 每次調用$()的時候,返回的其實是個_$實例 window.$ = function () {  return new _$(arguments); }})();// 通過這種方式,我們就可以直接使用$的鏈式調用$(ele) .addClass('red') .removeClass('green') .show();

當然,上述代碼其實可以進行優化一下,因為假設你引入的庫里,已經有人定義了$函數,那么就會面臨著命名沖突的問題。所以,我們可以為其增加一個安裝器

(function () { // 構造函數 function _$(selector) {  // ... } _$.prototype = {  addClass: function (className) {   // ...   return this;  },  removeClass: function (className) {   // ...   return this;  },  show: function () {   // ...   return this;  } }; _$.prototype.constructor = _$; // 增加一個安裝器 window.installHelper = function (scope, interface) {  scope[interface] = function () {   return new _$(arguments);  } }})();// 而用戶就可以這樣使用它來自定義掛載對象以及其命名installHelper(window, '$');$(ele).show();

當然,有時候鏈式調用并不是一個好的主意。鏈式調用適用于賦值器方法,但是對于取值器方法的話,就不是很友好。因為我們有時候是想要方法返回一些數據,而不是返回一個this。對于這種情況的話,主要有兩種解決方法,一種是對于取值器方法就不返回this,直接返回數據。而另一種方法呢,則是通過回調方法來處理數據:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 怀宁县| 武邑县| 繁峙县| 武宁县| 会理县| 谢通门县| 黄石市| 安庆市| 金湖县| 奉贤区| 南陵县| 高淳县| 肇庆市| 拉萨市| 遂昌县| 德江县| 保德县| 屏南县| 樟树市| 东源县| 凌源市| 永顺县| 岱山县| 涟源市| 新干县| 通河县| 虞城县| 铅山县| 丽水市| 成安县| 招远市| 利川市| 长武县| 米易县| 清丰县| 宁夏| 小金县| 新巴尔虎右旗| 民勤县| 肥乡县| 松潘县|