奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

jQuery

jQuery 源碼分析和Ready函數

時間:2024-10-24 23:27:48 jQuery 我要投稿
  • 相關推薦

jQuery 源碼分析和Ready函數

  這個功能在 jQuery的文檔中提到了三種等價的形式:

  復制代碼 代碼如下:

  // 定義在jQuery.fn.ready

  $(document).ready(handler);

  // 和上一個是同一個,不推薦

  $().ready(handler);

  // 單獨在jQuery對象中處理

  $(handler);

  // 以上這個形式的定義:

  if(jQuery.isFunction(selector) {

  return rootjQuery.ready(selector);

  }

  因此實際上都歸結與一個形式:jQuery.fn.ready(fn)。定義如下:

  復制代碼 代碼如下:

  ready: function(fn) {

  // 綁定事件到DOM上

  jQuery.bindReady();

  // 觸發回調函數

  readyList.done(fn);

  // 返回jQuery對象

  return this;

  }

  實際上jQuery內部并不僅僅只有一個對fn的引用。這里用到了 Deferred功能。在75行,為jQuery對象定義了readyList成員。而在442行在bindReady函數中初始化了這個變量:

  復制代碼 代碼如下:

  if(readyList) {

  return;

  }

  readyList = jQuery._Deferred();

  bindReady函數除了初始化readyList之外,主要處理了瀏覽器對于綁定事件的區別。IE使用attachEvent而其他瀏覽器使用addEventHandler。這兩個步驟完成后,ready函數使用readyList.resolveWith 觸發回調函數。除了這個工作外,ready還處理了holdReady。這個API 的作用是延遲ready事件的回調,主要目的是在ready事件前做點事情。holdReady設置了一個標志位readyWait。當這個標志位被設置之后,ready在調用readyList.resolveWith之前不停地調用setTimeout(jQuery.ready, 1)。即每隔固定時間就遞歸調用自己(不知道hold時間久了,js引擎會不會棧溢出),這樣最后被holdReady釋放的時候, setTimeout會沿著調用棧回來的。為了在這個棧完成之前不觸發ready回調函數。在每次調用setTimeout的時候,會遞增readyWait變量。用來指示被holdReady函數延誤了幾次調用。

  ###幾個基礎輔助函數

  在543行開始,定義了幾個值得注意的輔助函數:parseJSON,parseXML和globalEval。parseJSON把一個字符串變成JSON對象。我們一般使用的是eval。parseJSON封裝了這個操作,但是eval被當作了最后手段。因為最新JavaScript標準中加入了JSON序列化和反序列化的API。如果瀏覽器支持這個標準,則這兩個API是在JS引擎中用Native Code實現的,效率肯定比eval高很多。目前來看,Chrome和Firefox4都支持這個API。parseJSON使用如下:

  復制代碼 代碼如下:

  // 原生JSON API。反序列化是JSON.stringify(object)

  if(window.JSON && window.JSON.parse) {

  return window.JSON.parse(data);

  }

  // ... 大致地檢查一下字符串合法性

  return (new Function("return " + data))();

  parseXML函數也主要是標準API和IE的封裝。標準API是DOMParser對象。而IE使用的是Microsoft.XMLDOM的 ActiveXObject對象。定義:

  復制代碼 代碼如下:

  if(window.DOMParser) {

  tmp = new DOMParser();

  xml = tmp.parseFromString(data, "text/xml");

  } else {

  xml = new ActiveXObject("Microsoft.XMLDOM");

  xml.async = "false";

  xml.loadXML(data);

  }

  globalEval函數把一段腳本加載到全局context中。IE中可以使用window.execScript。其他瀏覽器需要使用eval。因為整個jQuery代碼都是一整個匿名函數,所以當前context是jQuery。主要代碼:

  復制代碼 代碼如下:

  (window.execScript || function(data) {

  window["eval"].call(window, data); // 在window context下運行

  })(data);

【jQuery 源碼分析和Ready函數】相關文章:

excel函數07-30

留學韓國的優勢和劣勢分析02-13

excel函數[優選]07-31

小升初選擇直升的優勢和劣勢分析07-21

EXCEL函數公式大全08-01

Excel函數公式大全07-27

(經典)excel函數15篇08-02

EXCEL函數公式大全[經典]08-05

常用的Excel函數公式11-23

稅務師的發展前景和優勢分析03-23

主站蜘蛛池模板: 乳源| 克拉玛依市| 仲巴县| 华阴市| 新郑市| 滦南县| 宜宾县| 循化| 尼玛县| 集安市| 五莲县| 陆川县| 桦南县| 苍南县| 临海市| 南城县| 柳江县| 田林县| 祁阳县| 遂溪县| 肇庆市| 夏津县| 莲花县| 华安县| 大庆市| 宁化县| 桦川县| 景宁| 永靖县| 华坪县| 万源市| 孝昌县| 兰溪市| 泽州县| 安康市| 垫江县| 星子县| 永宁县| 浏阳市| 阜平县| 攀枝花市|