亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript鏈式調用實例淺析

2024-05-06 16:47:09
字體:
來源:轉載
供稿:網友

本文實例分析了JavaScript鏈式調用。分享給大家供大家參考,具體如下:

$函數你已經很熟悉了。它通常返回一個html元素或一個html元素的集合,如下:

function$(){  var elements = [];  for(vari=0,len=arguments.length;i<len;++i){     var element = arguments[i];     if(typeof element ===”string”){       element = document.getElementById(element);     }     if(arguments.length==1){        return element;      }      elements.push(element);  }   return elements;}

但是,如果把這個函數改造為一個構造器,把那些元素作為數組保存在一個實例屬性中,并讓所有定義在構造器函數的prototype屬性所指對象中的方法都返回用以調用方法的那個實例的引用,那么它就具有了鏈式調用的能力。我首先需要把這個$函數改為一個工廠方法,它負責創建支持鏈式調用的對象。這個函數應該能接受元素數組形式的參數,以便我們能夠使用與原來一樣的公用接口。

(function(){  //use private class   function _$(els){    this.elements = [];     for(vari=0,len=els.length;i<len;i++){      var element = els[i];       if(typeof element ===”string”){        element = document.getElementById(element);       }       this.elements.push(element)     }   }    //The public interface remains the same.    window.$ = function(){       return new _$(arguments);    }})();

由于所有對象都會繼承其原型對象的屬性和方法,所以我們可以讓定義在原型對象中的那幾個方法都返回用以調用方法的實例對象的引用,這樣就可以對那些方法進行鏈式調用。想好這一點,我們現在就動手在_$這個私用構造函數的prototype對象中添加方法,以便實現鏈式調用

(function(){  //use private class  function _$(els){    //..省略之前上面的代碼  }  _$.prototype = {    each:function(fn){      for(var i=0,len=this.elements.length;i<len;i++){        fn.call(this,this.elements[i]);      }      return this;    },    show:function(prop,val){      var that = this;      this.each(function(el){        that.setStyle("display”,”block");      });      return this;    },    addEvent:function(type,fn){      var add = function(el){        if(window.addEventListener){         el.addEventListener(type,fn,false);        }else if(window.attachEvent){         el.attachEvent("on"+type,fn);        }      };      this.each(function(el){        add(el);      });      return this;    }  };  //The public interface remains the same.  window.$ = function(){    return new _$(arguments);  }})();

但是如果某個庫或者框架已經定義了一個$函數,那么我們的這個庫會將其改寫,有個簡單的辦法是在源碼中為$函數另去一個名字。但是如果你是從一個現有的庫獲得的源碼,那么每次代碼庫獲取更新的版本后 你都得重新改名字,因此這個方案并不是很好。好的解決辦法就是像下面一樣添加一個安裝器:

window.installHelper = function(scope, interface) {  scope[interface] = function() {   return new _$(arguments);  } };

用戶可以這樣去使用:

installHelper(window, '$');$('example').show();

下面是一個更復雜的例子,它展示了如何把這種功能添加到一個事先定義好的命名對象中:

// Define a namespace without overwriting it if it already exists.window.com = window.com || {};com.example = com.example || {};com.example.util = com.example.util || {};installHelper(com.example.util, 'get');(function() { var get = com.example.util.get; get('example').addEvent('click', function(e) {  get(this).addClass('hello'); });})();

有時候把方法連起來并不是一個好主意。鏈式調用很適合于賦值器方法,但對于取值器的方法,你可能會希望他們返回你要的數據而不是返回this。不過,如果你把鏈式調用作為首要目標,希望所有方法的使用方式保持一致的話,那么變通的方法還是有的:你可以利用回調技術來返回所要的數據下面有兩個例子:其中API類使用了普通的取值器(它中斷了調用鏈),而API2類則使用了回調方法:

// Accessor without function callbacks: returning requested data in accessors.window.API = window.API || {};API.prototype = function() { var name = 'Hello world'; // Privileged mutator method. setName: function(newName) {  name = newName;  return this; }, // Privileged accessor method. getName: function() {  return name; }}();// Implementation code.var o = new API;console.log(o.getName()); // Displays 'Hello world'.console.log(o.setName('Meow').getName()); // Displays 'Meow'.// Accessor with function callbacks.window.API2 = window.API2 || {};API2.prototype = function() { var name = 'Hello world'; // Privileged mutator method. setName: function(newName) {  name = newName;  return this; }, // Privileged accessor method. //通過把函數作為參數傳入 getName: function(callback) {  callback.call(this, name);  return this; }}();// Implementation code.var o2 = new API2;o2.getName(console.log).setName('Meow').getName(console.log);// Displays 'Hello world' and then 'Meow'.

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍小视频免费观看| 日韩av在线免费观看| 国产精品aaa| 亚洲日韩欧美视频| 亚洲另类欧美自拍| 久久久久国色av免费观看性色| 亚洲第一视频网| 日韩视频在线免费| 欧美一级淫片aaaaaaa视频| yw.139尤物在线精品视频| 亚洲一区国产精品| 疯狂欧美牲乱大交777| 亚洲第一级黄色片| 91精品视频在线看| 日韩欧美在线看| 永久免费看mv网站入口亚洲| 国产在线视频91| 色噜噜狠狠色综合网图区| 精品夜色国产国偷在线| 欧美一级视频在线观看| 日韩有码在线观看| 精品久久久av| 国产91热爆ts人妖在线| 欧美电影在线播放| 中文字幕久久久av一区| 最新日韩中文字幕| 亚洲午夜精品久久久久久久久久久久| 久久久伊人日本| 亚洲美女av电影| 国产亚洲精品激情久久| 欧美激情影音先锋| 亚洲国产另类 国产精品国产免费| 国产网站欧美日韩免费精品在线观看| 亚洲在线观看视频网站| 浅井舞香一区二区| 成人黄色免费网站在线观看| 成人h视频在线观看播放| 福利一区福利二区微拍刺激| 欧美大片网站在线观看| 日韩av在线免费观看| 亚洲男人第一av网站| 亚洲欧美激情另类校园| 国产一区玩具在线观看| 精品国产一区二区在线| 国产精品视频永久免费播放| 国产成人鲁鲁免费视频a| 97在线观看视频| 在线精品视频视频中文字幕| 热久久这里只有精品| 久久久久久久久久亚洲| 在线视频欧美日韩精品| 亚洲人成在线观看| 北条麻妃99精品青青久久| 97精品国产97久久久久久免费| 2019中文字幕在线免费观看| 亚洲第一精品电影| 91精品91久久久久久| 国模极品一区二区三区| 国产精品网红福利| 亚洲xxx视频| 欧美黑人性猛交| 日韩av在线直播| 久久久久久国产精品| 日韩av一区在线观看| 亚洲香蕉在线观看| 欧美性理论片在线观看片免费| 日韩一区二区精品视频| 国产中文日韩欧美| 国产精品视频99| 中文字幕欧美日韩精品| 性色av一区二区咪爱| 91精品久久久久久久久久久| 中文字幕日韩精品在线观看| 国产精品欧美一区二区| 欧美大片在线看免费观看| 亚洲黄色免费三级| 97人人爽人人喊人人模波多| 国产日韩欧美视频| 久久久久久久久久久亚洲| 久久影视电视剧免费网站清宫辞电视| 欧美性猛交xxxx乱大交| 国产成人97精品免费看片| 久久精品夜夜夜夜夜久久| 日韩电影大片中文字幕| 午夜精品三级视频福利| 午夜欧美不卡精品aaaaa| 91亚洲精品一区| 国产精品免费一区| 不卡毛片在线看| 日韩视频免费观看| 成人午夜在线视频一区| www.久久久久久.com| 国产在线高清精品| 亚洲国产中文字幕在线观看| 久久国产精品久久久久久久久久| 日韩在线观看免费网站| 91精品国产99久久久久久| 欧美国产精品人人做人人爱| 欧洲成人性视频| 97久久伊人激情网| 久久久久久网址| 亚洲福利影片在线| 日韩视频第一页| 国产97在线|日韩| 日韩欧美在线中文字幕| 久久久噜噜噜久久| 九九热精品视频在线播放| 一本色道久久综合狠狠躁篇怎么玩| 色播久久人人爽人人爽人人片视av| 欧美最猛性xxxxx免费| 91欧美精品午夜性色福利在线| 91色中文字幕| 国产99久久精品一区二区| 97香蕉超级碰碰久久免费的优势| 一区国产精品视频| 成人黄色午夜影院| 国产一区视频在线| 欧洲成人在线视频| 欧美激情小视频| 在线观看视频99| 亚洲成人亚洲激情| 国产精品视频免费在线| 欧美大片欧美激情性色a∨久久| 中文字幕欧美专区| 国语自产精品视频在线看一大j8| 日本免费久久高清视频| 91久久精品一区| 亚洲美女自拍视频| 国产精品极品在线| 亚洲精品一区二区久| 欧美国产激情18| 日本不卡免费高清视频| 欧美精品免费在线| 色樱桃影院亚洲精品影院| 日韩av电影在线免费播放| 国产成人免费91av在线| 成人国产在线视频| 国产午夜精品麻豆| 亚洲男人天堂2023| 欧美不卡视频一区发布| 欧美激情二区三区| 91精品国产高清自在线看超| 亚洲自拍偷拍一区| 69av在线视频| 亚洲一区二区三| 97视频在线观看免费高清完整版在线观看| 亚洲图片欧美午夜| 78色国产精品| 影音先锋日韩有码| 91精品久久久久久久久久另类| 国产精品av在线播放| 国产精品久久久久久av下载红粉| 中文字幕精品在线视频| 国产精品欧美一区二区| 国产精品嫩草影院久久久| 欧美日韩国产激情| 高清欧美一区二区三区| 一区二区三区国产视频| 国产在线观看精品一区二区三区| 国产色视频一区| 国产精品∨欧美精品v日韩精品| 92福利视频午夜1000合集在线观看| 亚洲欧美精品一区| 亚洲人成网站免费播放|