国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從jquery的end()如何實現到pushStack()的延伸思想

妤鋒シ / 1872人閱讀

問題:

查詢jquery源碼:

そうですね
看代碼:

輸出結果:


在jQuery對象中,每個對象都有一個prevObject屬性。

問題1:這個屬性什么時候創建??----->>> 只要你創建了jQuery對象就會產生
問題2:在哪里創建??------>>>> 在一個pushStack()方法里產生
問題3:作用??? ----->>>>指向操作前的jQuery對象引用
問題4:如何創建?? ------>>>> 看源碼:

步驟:

1. 創建一個jQuery對象,this.constructor()返回引用this
2. jQuery.merge 把elems節點,合并到新的jQuery對象
3. 給返回的新jQuery對象添加屬性prevObject

現在是不是還有點不懂??沒關系,繼續看圖.....

先查找$(".warp")的子元素,然后調用prevObject屬性,對比一看,他們倆都是class=warp的最外層div,證明prevObject確實是指向前一個操作,如果不進行任何破壞源對象的情況下(就是不進行查詢過濾操作),該對象的prevObject對象就指向一個jQuery自己定義的空間,而且任何對象的prevObject都指向它,如圖:

總結:

備注:其實這個圖略微有些瑕疵,$(".warp").children()其實指向的是一個$(".warp")的一個副本

$(".warp").children().prevObject != $(".warp")
$(".warp").children().prevObject !== $(".warp")

優點
1.很適合鏈式操作,比如我需要在一個父元素內尋找幾個毫無規律的子元素設置屬性或者搞其他事情,在javascript中,你需要:

$(".father").find(".son1").prop()....
$(".father").find(".son5").prop()....
....

你看這代碼,不停的創建這個父元素對象(當然你可以緩存這個父對象),而且必須寫多行,倆者之間沒有任何關聯。而jquery利用了他們的共有規律(都是調用父元素去查找子元素進行操作,那我何不直接使用某個方法返回上一級操作的對象??)直接使用一個prevobject屬性去返回它,這樣就有了:

$(".father").find(".son1").prop().....巴拉巴拉操作  .prevObject.find(".son5").prop()...

直接一行完成操作像一條鏈子,不僅好看,還一目了然....
2.我們很少使用pushStack方法,然而在jQuery中,好多增刪改查操作都會使用這個方法,這使得該方法的封裝性和穩定性能都很very good!!

注意:addBack()方法返回的是當前操作對象和上一個操作對象,而且這個組合的新的對象會緩存在pushStack棧中

當我們寫腳本的時候,對代碼的封裝都要很好的完成,把一些最基本的但又是涉及到很多函數操作時的方法封裝在一個函數中,然后只提供一個接口給外面,類似于java的接口(高度抽象的方法),外面只能通過這個接口的一些屬性或者方法去調用,你可以寫在原型上,采用原型模式,或者組合使用構造函數模式和原型模式,如果不適合你也可以采用穩妥構造函數模式.

借鑒:
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/...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93591.html

相關文章

  • jQuery 源碼系列(九)回溯機制

    摘要:在對象的內部,有著一個對象棧,用來維護所有已經操作過的對象。這樣來想一想,如果每一個對象都有一個指針指向上一個對象的話,也就間接組成了一個對象棧。 歡迎來我的專欄查看系列文章。 學習了 prevObject 之后發現,我之前寫的一篇博客介紹 pushStack 函數那個內容是有問題的。本來我以為這個 pushStack 函數就是一個普通的函數,它接受一個 DOM (數組)參數,把該參數...

    hss01248 評論0 收藏0
  • 淺析jQuery整體框架與實現(上)

    摘要:通常的做法是,為它們指定回調函數。請求返回請求返回請求返回異步隊列解耦異步任務和回調函數為模塊隊列模塊事件提供基礎功能。 前言 jQuery整體框架甚是復雜,也不易讀懂,這幾日一直在研究這個笨重而強大的框架。jQuery的總體架構可以分為:入口模塊、底層模塊和功能模塊。這里,我們以jquery-1.7.1為例進行分析。 jquery的總體架構 16 (function( window,...

    VEIGHTZ 評論0 收藏0
  • jQuery源碼分析2-JQ對象添加一些方法和屬性

    摘要:節點修改對象的屬性,這就相當于把對象轉成了一個類數組,最后返回,可用于鏈式調用。如果傳入的是單標簽,且第二個參數是一個純對象例如則把后面對象的屬性一一添加到創建的這個節點的屬性上。 我們先看看jQuery的原型中初始化了哪些屬性和方法: jQuery.fn = jQuery.prototype = { jquery: core_version, //jquery版本號 ...

    TANKING 評論0 收藏0
  • FE.SRC-逐行分析jQuery2.0.3源碼-完整筆記

    摘要:根據項目選型決定是否開啟。為了壓縮,可維護為了支持從而使用代替變量存儲防沖突會用到,形如版本號聲明最終調用的是這個原型實際上。功能檢測統一兼容性問題。 概覽 (function (){ (21 , 94) 定義了一些變量和函數 jQuery=function(); (96 , 293) 給jQuery對象添加一些方法和屬性; (285 , 347) ...

    Lin_R 評論0 收藏0
  • FE.SRC-逐行分析jQuery2.0.3源碼-完整筆記

    摘要:根據項目選型決定是否開啟。為了壓縮,可維護為了支持從而使用代替變量存儲防沖突會用到,形如版本號聲明最終調用的是這個原型實際上。功能檢測統一兼容性問題。 概覽 (function (){ (21 , 94) 定義了一些變量和函數 jQuery=function(); (96 , 293) 給jQuery對象添加一些方法和屬性; (285 , 347) ...

    褰辯話 評論0 收藏0

發表評論

0條評論

妤鋒シ

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<