日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}

發(fā)布時間:2024/4/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){} 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2.1.bug通過索引查詢

這里的#13335是bug的索引,如何查詢呢?

第一步,瀏覽器地址欄輸入"https://bugs.jquery.com/"。

第二步,在網(wǎng)頁的搜索框里輸入索引值,那么就可以查詢bug的更改歷史(changelogs)了。

2.2 "use strict",不使用嚴(yán)格模式(20行)

代碼不規(guī)范就會報錯。IE的低版本并不支持,火狐可能假死。所以,這一行是一條注釋,并不提倡使用。

"use strict";a=10;//報錯,Uncaught ReferenceError: a is not defined。必須添加上var。還有很多嚴(yán)格模式的報錯,不細(xì)說。

2.3.變量rootjQuery

根據(jù)注釋?// A central reference to the root jQuery(document)?說明他是一個指向document的根對象。搜索一下rootjQuery,866行,?rootjQuery = jQuery(document);?接下來需要了解的是為什么要使用變量的形式,變量能將值語義化。?a=a+10;?這里并不知道10是什么東西,可是如果寫成?var iSpeed=10;?那么可維護(hù)性可讀性會更高。

2.4.變量readyList

根據(jù)注釋?// The deferred used on DOM ready?說明他是一個DOM加載時使用的延遲對象。

2.5.判斷undefined的類型

代碼?core_strundefined = typeof undefined?究竟有什么意圖呢?這是在解決一個小眾的bug。比如要判斷a屬性有沒有被定義為window的屬性,可以使用?window.a=="undefined";?和?typeof window.a=="undefined";?兩種方式。可是第一種方式是有兼容問題的,第二種才是全能的。正如注釋所說,?// Support: IE9,For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`?老版本的IE(6、7、8、9)在第一種方式上有兼容問題,為什么注釋里寫的是IE9,因為這里的源碼版本是2.0.3,所以就不談IE6、7、8。所以用typeof替代掉直接的邏輯判斷。

2.6.變量location、document和docEle的保存

// Use the correct document accordingly with window argument (sandbox)通過window參數(shù)來使用正確的document location = window.location,document = window.document,docElem = document.documentElement,

現(xiàn)實中的沙箱,是一種兒童玩具,類如KFC中一個裝滿小球的容器,兒童可以在隨意玩耍,起到保護(hù)兒童的作用。所以可以理解為安全環(huán)境。從代碼的角度上說好處是把某些要用的屬性用變量保存下來,那么壓縮的時候就會變成字母。location是網(wǎng)址對象,document是document對象,docEle是html元素。

2.7.變量_jQuery、_$的保存、class2Type對象、core_deletedIds數(shù)組的定義

?// Map over jQuery in case of overwrite?映射到j(luò)Query以覆蓋。?// Map over the $ in case of overwrite?映射到$以覆蓋。說到這里,不得不說,jQuery框架提供給外部的方法是$()和jQuery(),而兩個變量的作用是防止沖突。具體防沖突的方法在349行-817行的jQuery.extend()工具方法。class2type是$.type要用到的一個對象變量,用來存一些值。

?// List of deleted data cache ids, so we can reuse them?說core_deletedIds是用來羅列刪除的數(shù)據(jù)緩存id,所以我們可以重復(fù)使用它們。太棒了!

2.8.core_打頭的局部變量存儲

?// Save a reference to some core methods?存儲一些core方法的引用。變量的存儲,方便使用(字符串更簡潔),而且方便壓縮。

core_version = "2.0.3",//存儲了版本號 core_concat = core_deletedIds.concat,//數(shù)組的concat(合并)方法 core_push = core_deletedIds.push,//數(shù)組的push方法 core_slice = core_deletedIds.slice,//數(shù)組的slice方法 core_indexOf = core_deletedIds.indexOf,core_toString = class2type.toString,//對象的toString方法 core_hasOwn = class2type.hasOwnProperty,core_trim = core_version.trim,//trim是字符串的方法,去掉字符串首尾空格

需要說明的事trim方法。在老版本瀏覽器trim方法是沒有的,所以要通過正則把首尾空格去掉。高級瀏覽器就有trim方法了,所以可以直接來用。這里的jQuery版本2.0.3是放棄了IE6、7、8的,所以這里可以直接使用trim方法。

有首尾空格的代碼:alert("("+" 123456 "+")");?它的顯示效果是有空格的字符串。

使用了trim方法的代碼:?alert("("+" 123456 ".trim()+")");?,它的顯示效果是去掉首尾空格的。

2.9 jQuery函數(shù)

jQuery = function( selector, context ) {// The jQuery object is actually just the init constructor 'enhanced'

//jQuery對象實際上,僅僅是初始化構(gòu)造器的增強版本。return new jQuery.fn.init( selector, context, rootjQuery );},

jQuery函數(shù)通過8826行的? window.jQuery=window.$=jQuery;?暴露給外部jQuery的接口。對外提供的接口就是?$()?或者?jQuery()?。可以看到j(luò)Query返回的是一個對象,所以后面可以接方法,包括鏈?zhǔn)秸{(diào)用,比如?$("#div1").css();?。我們看見jQuery.fn.init,因為在?jQuery.fn = jQuery.prototype = {96行說的是prototype是fn,所以就是在原型上找init函數(shù)。

普通的面向?qū)ο髮懛ㄊ峭ㄟ^protoype寫init和css方法,為了調(diào)用css方法需要先用new方法寫構(gòu)造器,然后使用init方法調(diào)用,最后才能調(diào)用到css方法。

function Aaa(){}Aaa.prototype.init=function(){//初始化 } Aaa.prototype.css=function(){}var al=new Aaa();al.init();al.css()

jQuery的面向?qū)ο髮懛ㄊ欠浅G擅畹?#xff0c;最終讓$().css()能夠成功找到css方法。

function jQuery(){return new jQuery.prototype.init();}jQuery.prototype.init=function(){};jQuery.prototype.css=function(){}; jQuery.fn.init.prototype = jQuery.fn;//fn也就是protoype。283行。 jQuery().css();

//調(diào)用jQuery()返回的是jQuery.prototype(jQuery原型)的init函數(shù)的原型構(gòu)造器。它呢由于283行的賦值,所以剛剛的值就是jQuery.prototype。

//如上,調(diào)用jQuery()。得到的結(jié)果是jQuery.prototype。所以css就可以通過jQuery().css()。

2.10 正則有關(guān)的變量

關(guān)于core_pnum的正則,?// Used for matching numbers?用來匹配數(shù)字的,比如正數(shù)啊、負(fù)數(shù)啊,有沒有小數(shù)點,以及科學(xué)計數(shù)法。到css方法的時候要設(shè)置寬和高,要用到數(shù)字。

?core_rnotwhite = /\S+/g,?這個正則呢,?// Used for splitting on whitespace?是當(dāng)字符串要用空格分割一下。? // A simple way to check for HTML strings // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <)?rquickExpr是一個簡單的方式來檢查HTML字符串,前面部分是匹配標(biāo)簽,后面部分是匹配id。它可以用來防XSS注入。rsingleTag是匹配獨立的標(biāo)簽。

msPrefix的ms是IE瀏覽器前綴,它跟其他瀏覽器前綴有區(qū)別。css中的margin-left在html DOM的屬性是marginLeft。-webkit-margin-left在HTML DOM的屬性是webkitMarginLeft。而-ms-margin-left在html DOM的屬性是MsMarginLeft。rdashAlpha匹配的比如-2d,會修改為2d。

2.11 回調(diào)函數(shù)fcamelCase和completed

fcamelCase在jQuery.camelCase作為回調(diào)函數(shù)使用。completed是ready事件的處理器和自身的清除方法。

轉(zhuǎn)載于:https://www.cnblogs.com/chenmeng2062/p/6728289.html

總結(jié)

以上是生活随笔為你收集整理的jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。