成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Javasript設(shè)計模式之鏈?zhǔn)秸{(diào)用的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)Javasript設(shè)計模式之鏈?zhǔn)秸{(diào)用的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、云浮網(wǎng)站維護(hù)、網(wǎng)站推廣。

具體內(nèi)容如下

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

// 不使用鏈?zhǔn)秸{(diào)用
const element = $(ele);
element.addClass('red');
element.removeClass('green');
element.show();

// 鏈?zhǔn)秸{(diào)用
$(ele)
 .addClass('red')
 .removeClass('green')
 .show();

而jquery這種調(diào)用方式就是鏈?zhǔn)秸{(diào)用。我們可以從上述代碼看出來,如果不使用鏈?zhǔn)秸{(diào)用的話,那么我們會增加很多重復(fù)的代碼,而且特別冗余。而通過鏈?zhǔn)秸{(diào)用,我們可以節(jié)省很多代碼,并且代碼看起來更加優(yōu)雅和整潔。那么,接下來,我們來討論下如何實(shí)現(xiàn)一個支持鏈?zhǔn)秸{(diào)用的庫。

了解過原型鏈的人都知道,由構(gòu)造函數(shù)生成的實(shí)例都可以訪問其原型對象的屬性和方法,因此,我們讓定義在原型對象的方法最后都返回this(調(diào)用該方法的實(shí)例),就可以對原型方法進(jìn)行鏈?zhǔn)秸{(diào)用。

// 通過立即執(zhí)行函數(shù),聲明了一個_$函數(shù),并且將一個$函數(shù)掛載到window上,并且每次調(diào)用$()的時候,返回的其實(shí)是個_$實(shí)例,由于原型對象方法里,執(zhí)行最后都會返回一個this,因此就可以執(zhí)行鏈?zhǔn)秸{(diào)用。
(function () {
 // 構(gòu)造函數(shù)
 function _$(selector) {
  // ...
 }

 _$.prototype = {
  addClass: function (className) {
   // ...
   return this;
  },
  removeClass: function (className) {
   // ...
   return this;
  },
  show: function () {
   // ...
   return this;
  }
 };

 _$.prototype.constructor = _$;

 // 每次調(diào)用$()的時候,返回的其實(shí)是個_$實(shí)例
 window.$ = function () {
  return new _$(arguments);
 }
})();

// 通過這種方式,我們就可以直接使用$的鏈?zhǔn)秸{(diào)用
$(ele)
 .addClass('red')
 .removeClass('green')
 .show();

當(dāng)然,上述代碼其實(shí)可以進(jìn)行優(yōu)化一下,因?yàn)?假設(shè)你引入的庫里,已經(jīng)有人定義了$函數(shù),那么就會面臨著命名沖突的問題。所以,我們可以為其增加一個安裝器

(function () {
 // 構(gòu)造函數(shù)
 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();

當(dāng)然,有時候鏈?zhǔn)秸{(diào)用并不是一個好的主意。鏈?zhǔn)秸{(diào)用適用于賦值器方法,但是對于取值器方法的話,就不是很友好。因?yàn)槲覀冇袝r候是想要方法返回一些數(shù)據(jù),而不是返回一個this。對于這種情況的話,主要有兩種解決方法,一種是對于取值器方法就不返回this,直接返回數(shù)據(jù)。而另一種方法呢,則是通過回調(diào)方法來處理數(shù)據(jù):

// 第一種方法,當(dāng)遇到取值器,則直接返回數(shù)據(jù)
(function () {
 // 構(gòu)造函數(shù)
 function _$(selector) {
  this.ele = document.querySelector(selector);
  // ...
 }

 _$.prototype = {
  addClass: function (className) {
   // ...
   return this;
  },
  // 取值器
  getClass: function () {
   // ...
   return this.ele.className;
  }
 };

 _$.prototype.constructor = _$;
})();

// 第二種方式,通過回調(diào)的方式來處理數(shù)據(jù)
(function () {
 // 構(gòu)造函數(shù)
 function _$(selector) {
  this.ele = document.querySelector(selector);
  // ...
 }

 _$.prototype = {
  addClass: function (className) {
   // ...
   return this;
  },
  getClass: function (cb) {
   // ...
   cb.call(this, this.ele.className);
   return this;
  }
 };

 _$.prototype.constructor = _$;
})();

關(guān)于“Javasript設(shè)計模式之鏈?zhǔn)秸{(diào)用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

當(dāng)前名稱:Javasript設(shè)計模式之鏈?zhǔn)秸{(diào)用的示例分析
新聞來源:http://jinyejixie.com/article8/pgejip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站改版、服務(wù)器托管、網(wǎng)站營銷、網(wǎng)站內(nèi)鏈外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
横峰县| 开阳县| 临沂市| 晋州市| 乌拉特前旗| 华容县| 大城县| 尼勒克县| 南投县| 肇庆市| 廊坊市| 明光市| 北辰区| 太康县| 富锦市| 正安县| 连山| 伊春市| 大丰市| 平罗县| 红桥区| 阜阳市| 蒙阴县| 睢宁县| 通辽市| 乌鲁木齐县| 桐庐县| 桐庐县| 临城县| 甘德县| 织金县| 庆云县| 东光县| 尼玛县| 仪征市| 嘉峪关市| 疏勒县| 绍兴市| 临沧市| 介休市| 祁阳县|