問(wèn)題:
查詢jquery源碼:
そうですね
看代碼:
輸出結(jié)果:
在jQuery對(duì)象中,每個(gè)對(duì)象都有一個(gè)prevObject屬性。
問(wèn)題1:這個(gè)屬性什么時(shí)候創(chuàng)建??----->>> 只要你創(chuàng)建了jQuery對(duì)象就會(huì)產(chǎn)生
問(wèn)題2:在哪里創(chuàng)建??------>>>> 在一個(gè)pushStack()方法里產(chǎn)生
問(wèn)題3:作用??? ----->>>>指向操作前的jQuery對(duì)象引用
問(wèn)題4:如何創(chuàng)建?? ------>>>> 看源碼:
步驟:
1. 創(chuàng)建一個(gè)jQuery對(duì)象,this.constructor()返回引用this 2. jQuery.merge 把elems節(jié)點(diǎn),合并到新的jQuery對(duì)象 3. 給返回的新jQuery對(duì)象添加屬性prevObject
現(xiàn)在是不是還有點(diǎn)不懂??沒(méi)關(guān)系,繼續(xù)看圖.....
先查找$(".warp")的子元素,然后調(diào)用prevObject屬性,對(duì)比一看,他們倆都是class=warp的最外層div,證明prevObject確實(shí)是指向前一個(gè)操作,如果不進(jìn)行任何破壞源對(duì)象的情況下(就是不進(jìn)行查詢過(guò)濾操作),該對(duì)象的prevObject對(duì)象就指向一個(gè)jQuery自己定義的空間,而且任何對(duì)象的prevObject都指向它,如圖:
總結(jié):
備注:其實(shí)這個(gè)圖略微有些瑕疵,$(".warp").children()其實(shí)指向的是一個(gè)$(".warp")的一個(gè)副本
$(".warp").children().prevObject != $(".warp") $(".warp").children().prevObject !== $(".warp")
優(yōu)點(diǎn):
1.很適合鏈?zhǔn)讲僮?/strong>,比如我需要在一個(gè)父元素內(nèi)尋找?guī)讉€(gè)毫無(wú)規(guī)律的子元素設(shè)置屬性或者搞其他事情,在javascript中,你需要:
$(".father").find(".son1").prop().... $(".father").find(".son5").prop().... ....
你看這代碼,不停的創(chuàng)建這個(gè)父元素對(duì)象(當(dāng)然你可以緩存這個(gè)父對(duì)象),而且必須寫(xiě)多行,倆者之間沒(méi)有任何關(guān)聯(lián)。而jquery利用了他們的共有規(guī)律(都是調(diào)用父元素去查找子元素進(jìn)行操作,那我何不直接使用某個(gè)方法返回上一級(jí)操作的對(duì)象??)直接使用一個(gè)prevobject屬性去返回它,這樣就有了:
$(".father").find(".son1").prop().....巴拉巴拉操作 .prevObject.find(".son5").prop()...
直接一行完成操作像一條鏈子,不僅好看,還一目了然....
2.我們很少使用pushStack方法,然而在jQuery中,好多增刪改查操作都會(huì)使用這個(gè)方法,這使得該方法的封裝性和穩(wěn)定性能都很very good!!
注意:addBack()方法返回的是當(dāng)前操作對(duì)象和上一個(gè)操作對(duì)象,而且這個(gè)組合的新的對(duì)象會(huì)緩存在pushStack棧中
當(dāng)我們寫(xiě)腳本的時(shí)候,對(duì)代碼的封裝都要很好的完成,把一些最基本的但又是涉及到很多函數(shù)操作時(shí)的方法封裝在一個(gè)函數(shù)中,然后只提供一個(gè)接口給外面,類似于java的接口(高度抽象的方法),外面只能通過(guò)這個(gè)接口的一些屬性或者方法去調(diào)用,你可以寫(xiě)在原型上,采用原型模式,或者組合使用構(gòu)造函數(shù)模式和原型模式,如果不適合你也可以采用穩(wěn)妥構(gòu)造函數(shù)模式.
借鑒:
1.http://www.cnblogs.com/aaronj...
2.http://blog.csdn.net/wulex/ar...
3.https://stackoverflow.com/que...
4.https://www.learningjquery.co...
5.https://www.cnblogs.com/MnCu8...
6.http://jquery.cuishifeng.cn/i...
7.http://www.runoob.com/jquery/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/93591.html
摘要:在對(duì)象的內(nèi)部,有著一個(gè)對(duì)象棧,用來(lái)維護(hù)所有已經(jīng)操作過(guò)的對(duì)象。這樣來(lái)想一想,如果每一個(gè)對(duì)象都有一個(gè)指針指向上一個(gè)對(duì)象的話,也就間接組成了一個(gè)對(duì)象棧。 歡迎來(lái)我的專欄查看系列文章。 學(xué)習(xí)了 prevObject 之后發(fā)現(xiàn),我之前寫(xiě)的一篇博客介紹 pushStack 函數(shù)那個(gè)內(nèi)容是有問(wèn)題的。本來(lái)我以為這個(gè) pushStack 函數(shù)就是一個(gè)普通的函數(shù),它接受一個(gè) DOM (數(shù)組)參數(shù),把該參數(shù)...
摘要:通常的做法是,為它們指定回調(diào)函數(shù)。請(qǐng)求返回請(qǐng)求返回請(qǐng)求返回異步隊(duì)列解耦異步任務(wù)和回調(diào)函數(shù)為模塊隊(duì)列模塊事件提供基礎(chǔ)功能。 前言 jQuery整體框架甚是復(fù)雜,也不易讀懂,這幾日一直在研究這個(gè)笨重而強(qiáng)大的框架。jQuery的總體架構(gòu)可以分為:入口模塊、底層模塊和功能模塊。這里,我們以jquery-1.7.1為例進(jìn)行分析。 jquery的總體架構(gòu) 16 (function( window,...
摘要:節(jié)點(diǎn)修改對(duì)象的屬性,這就相當(dāng)于把對(duì)象轉(zhuǎn)成了一個(gè)類數(shù)組,最后返回,可用于鏈?zhǔn)秸{(diào)用。如果傳入的是單標(biāo)簽,且第二個(gè)參數(shù)是一個(gè)純對(duì)象例如則把后面對(duì)象的屬性一一添加到創(chuàng)建的這個(gè)節(jié)點(diǎn)的屬性上。 我們先看看jQuery的原型中初始化了哪些屬性和方法: jQuery.fn = jQuery.prototype = { jquery: core_version, //jquery版本號(hào) ...
摘要:根據(jù)項(xiàng)目選型決定是否開(kāi)啟。為了壓縮,可維護(hù)為了支持從而使用代替變量存儲(chǔ)防沖突會(huì)用到,形如版本號(hào)聲明最終調(diào)用的是這個(gè)原型實(shí)際上。功能檢測(cè)統(tǒng)一兼容性問(wèn)題。 概覽 (function (){ (21 , 94) 定義了一些變量和函數(shù) jQuery=function(); (96 , 293) 給jQuery對(duì)象添加一些方法和屬性; (285 , 347) ...
摘要:根據(jù)項(xiàng)目選型決定是否開(kāi)啟。為了壓縮,可維護(hù)為了支持從而使用代替變量存儲(chǔ)防沖突會(huì)用到,形如版本號(hào)聲明最終調(diào)用的是這個(gè)原型實(shí)際上。功能檢測(cè)統(tǒng)一兼容性問(wèn)題。 概覽 (function (){ (21 , 94) 定義了一些變量和函數(shù) jQuery=function(); (96 , 293) 給jQuery對(duì)象添加一些方法和屬性; (285 , 347) ...
閱讀 3040·2023-04-25 18:06
閱讀 3311·2021-11-22 09:34
閱讀 2872·2021-08-12 13:30
閱讀 2059·2019-08-30 15:44
閱讀 1671·2019-08-30 13:09
閱讀 1640·2019-08-30 12:45
閱讀 1726·2019-08-29 11:13
閱讀 3618·2019-08-28 17:51