亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
建議看完源碼再來看這一節,要不會很頭疼的
通俗易懂的理解啊, 不錯 ?。?!引用一下 !!理解:1.$(),jQuery()是執行一個函數,$和jQuery是函數名稱,這個函數返回的是一個對象,所以里面是一個new表達式,但是名字不能是自己,否則無限循環。2.既然不是自己,其實可以理解為jQuery()返回的不是jQuery對象,而是jQuery.fn.init(一個名字而已)對象。3.但是為了統一和方法/屬性的共用(理解原型鏈),jQUuery這樣處理,jQuery.fn.init.prototype = jQuery.prototype.
學到后面就沒人了,太浮躁
第三條真是看得云里霧里,隔了兩天再看現在仍是一臉懵逼
js中的同步: 后一個任務等待前一個任務結束,然后再執行,程序的執行順序與任務的排列順序是一致的、同步的。 異步:,每一個任務有一個或多個回調函數(callback),前一個任務結束后,不是執行后一個任務,而是執行回調函數,后一個任務則是不等前一個任務結束就執行,所以程序的執行順序與任務的排列順序是不一致的、異步的。
這兩個案例都實現了異步,但不同的是,案例一比較難看懂,而且代碼耦合度較高。 案例二則相對來說清晰很多。
先推薦看一看這篇博客:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
異步就是解決這種呆板,讓b進入阻塞狀態,掛起b,繼續運行c 和 d,當a 產生了交互結果,再運行b。
同步的代碼段運行順序: a - b -c -d
異步的代碼段運行順序: a - c -d -b 或者 a - c -b -d
我的理解:所謂阻塞,就是b代碼段依賴于a代碼段的結果,假如a代碼段未返回結果,那么b代碼段就會一直等待。
我們知道js是單線程的,也就是說,同一時刻,只能運行一段代碼,假設我們自上而下有a b c d四個代碼段,a代碼運行時需要與服務器端交互,而b代碼則依賴于a的交互結果,當a運行完成后,自上而下就需要運行b代碼了,可是因為b需要a與服務器的交互結果,而與服務器進行交互相對來說又很慢,所以我們只能讓b阻塞,然后等待知道交互結果產生再運行b,然后運行c d??墒莄代碼和d代碼根本就不需要依賴于a的結果,我們阻塞了b的話,c 和 d 也一直在等待,這樣是不是有些太呆板了?異步就是解決這種呆板...
jQuery中每一個對象都是一個新的jQuery.fn.init()實例,所以即使兩個jQuery中包含的DOM元素相同,這兩個jQuery對象也并無關系。
好了,那么靜態方法就是給jQuery對象附加一個uid,而實例方法則就是給jQuery對象中的DOM節點上附加uid。這就是為啥靜態方法不覆蓋而實例方法覆蓋的原因了
看到這里,我思考了很久,終于搞懂了以前一直疑惑的地方。
直接看代碼:
代碼一:
var a1 = document.getElementById('#ha');
var a2 = document.getElemnetById('#ha');
console.log(a1 ==a2) // true
代碼二:
var a1 = $('#ha');
var a2 = $('#ha');
console.log(a1 == a2) // false
不同的結果,我以前一直以js的思想思考jQuery。jQuery中每一個對象都是一個新的 。。。。
接上: 比如說我們有一個緩存池的expando屬性的值為20161124.1825 ,在這個緩存池中 只有 一個名為 a 的DOM元素,那么就會為a附加一個屬性20161124.1825 ,也就是a.20161124.1825 = 1 (為什么不是0呢?看上面的代碼this.cache[0]是一個函數,返回某個對象且不能修改)。
當我們要操作a的緩存對象時,我們需要找到a的20161124.1825 = 1屬性,根據這個屬性找到expando為20161124.1825的緩存池,然后找到緩存池中的cache[1],對其進行操作。
個人理解(可能有錯誤啊,請高手指點):Data()構造函數本身所要構造的就是緩存池對象,因為可能有多個緩存池,所以,為了給每個緩存池一個獨一無二的id,就用了這段代碼:this.expando = jQuery.expando + Math.random();每一個緩存池對象都有expando屬性,這個屬性保存了其自身的id,而且這個id值幾乎不可能與其他緩存池的expando屬性值相同。
然后每個緩存池可能有多個DOM元素映射對象,凡事從屬于這個緩存池的DOM元素都存在一個 與這個緩存池的expando屬性的值相同的屬性,這個屬性保存了自身的映射對象在緩存池中對應的key。 字數限制另起評論
不知道我的理解對不對:
1 DOM元素
cache = {id1:{ },id2:{ }......}
DOM.cache_id = some_number // 數據類型是數字
當我們要操作DOM的緩存數據時,我們需要訪問他的cache_id屬性,這個屬性的值是數字類型,取到值以后,使用cache[some_number]就得到了該DOM的緩存數據對象。 DOM的cache_id屬性只是保存了映射關系,并沒有綁定額外的js對象。
2 js對象
緩存數據對象直接存儲在該js對象的某個屬性中。操作這個js對象的屬性就是操作這個js的緩存數據對象。
在開發中,我們可能會為DOM節點自定義添加很多屬性,如果給DOM元素添加自定義的屬性和過多的數據可能會引起內存泄漏,所以要盡量避免這么干。(在js中內存泄漏的大多情況都是由于DOM節點與js對象循環引用引起的) ,為了在給DOM附加額外屬性的同時不引起內存泄漏,引入了數據緩存系統。
數據緩存接口有兩個:$.data() .data()
恭喜你,通過了本次課程 返回課程
課程須知
源碼的閱讀不是一蹴而就的,需要大家有一定的功底,比如jQuery的基礎運用以及API的熟悉度,除此之外要有牢固的javascript、DOM、CSS的基礎功底,甚至還需要理解常見的設計模式、數據結構等等。當然大家也不要被這些給嚇住了,理解,總是需要一種慢慢的學習過程。
老師告訴你能學到什么?
通過本課程的學習,您可以由淺入深地剖析jQuery庫的設計與實現。 其中我們圍繞的重心: 1、設計理念 2、結構組織 3、接口設計 4、模式運用 5、場景套用

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?

舉報

0/150
提交
取消