通俗易懂的理解啊, 不錯 ?。?!引用一下 ??!理解:1.$(),jQuery()是執(zhí)行一個函數(shù),$和jQuery是函數(shù)名稱,這個函數(shù)返回的是一個對象,所以里面是一個new表達式,但是名字不能是自己,否則無限循環(huán)。2.既然不是自己,其實可以理解為jQuery()返回的不是jQuery對象,而是jQuery.fn.init(一個名字而已)對象。3.但是為了統(tǒng)一和方法/屬性的共用(理解原型鏈),jQUuery這樣處理,jQuery.fn.init.prototype = jQuery.prototype.
2016-11-28
js中的同步: 后一個任務(wù)等待前一個任務(wù)結(jié)束,然后再執(zhí)行,程序的執(zhí)行順序與任務(wù)的排列順序是一致的、同步的。 異步:,每一個任務(wù)有一個或多個回調(diào)函數(shù)(callback),前一個任務(wù)結(jié)束后,不是執(zhí)行后一個任務(wù),而是執(zhí)行回調(diào)函數(shù),后一個任務(wù)則是不等前一個任務(wù)結(jié)束就執(zhí)行,所以程序的執(zhí)行順序與任務(wù)的排列順序是不一致的、異步的。
2016-11-25
這兩個案例都實現(xiàn)了異步,但不同的是,案例一比較難看懂,而且代碼耦合度較高。 案例二則相對來說清晰很多。
先推薦看一看這篇博客:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
先推薦看一看這篇博客:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
2016-11-25
我的理解:所謂阻塞,就是b代碼段依賴于a代碼段的結(jié)果,假如a代碼段未返回結(jié)果,那么b代碼段就會一直等待。
我們知道js是單線程的,也就是說,同一時刻,只能運行一段代碼,假設(shè)我們自上而下有a b c d四個代碼段,a代碼運行時需要與服務(wù)器端交互,而b代碼則依賴于a的交互結(jié)果,當a運行完成后,自上而下就需要運行b代碼了,可是因為b需要a與服務(wù)器的交互結(jié)果,而與服務(wù)器進行交互相對來說又很慢,所以我們只能讓b阻塞,然后等待知道交互結(jié)果產(chǎn)生再運行b,然后運行c d??墒莄代碼和d代碼根本就不需要依賴于a的結(jié)果,我們阻塞了b的話,c 和 d 也一直在等待,這樣是不是有些太呆板了?異步就是解決這種呆板...
我們知道js是單線程的,也就是說,同一時刻,只能運行一段代碼,假設(shè)我們自上而下有a b c d四個代碼段,a代碼運行時需要與服務(wù)器端交互,而b代碼則依賴于a的交互結(jié)果,當a運行完成后,自上而下就需要運行b代碼了,可是因為b需要a與服務(wù)器的交互結(jié)果,而與服務(wù)器進行交互相對來說又很慢,所以我們只能讓b阻塞,然后等待知道交互結(jié)果產(chǎn)生再運行b,然后運行c d??墒莄代碼和d代碼根本就不需要依賴于a的結(jié)果,我們阻塞了b的話,c 和 d 也一直在等待,這樣是不是有些太呆板了?異步就是解決這種呆板...
jQuery中每一個對象都是一個新的jQuery.fn.init()實例,所以即使兩個jQuery中包含的DOM元素相同,這兩個jQuery對象也并無關(guān)系。
好了,那么靜態(tài)方法就是給jQuery對象附加一個uid,而實例方法則就是給jQuery對象中的DOM節(jié)點上附加uid。這就是為啥靜態(tài)方法不覆蓋而實例方法覆蓋的原因了
好了,那么靜態(tài)方法就是給jQuery對象附加一個uid,而實例方法則就是給jQuery對象中的DOM節(jié)點上附加uid。這就是為啥靜態(tài)方法不覆蓋而實例方法覆蓋的原因了
2016-11-25
看到這里,我思考了很久,終于搞懂了以前一直疑惑的地方。
直接看代碼:
代碼一:
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
不同的結(jié)果,我以前一直以js的思想思考jQuery。jQuery中每一個對象都是一個新的 。。。。
直接看代碼:
代碼一:
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
不同的結(jié)果,我以前一直以js的思想思考jQuery。jQuery中每一個對象都是一個新的 。。。。
2016-11-25
接上: 比如說我們有一個緩存池的expando屬性的值為20161124.1825 ,在這個緩存池中 只有 一個名為 a 的DOM元素,那么就會為a附加一個屬性20161124.1825 ,也就是a.20161124.1825 = 1 (為什么不是0呢?看上面的代碼this.cache[0]是一個函數(shù),返回某個對象且不能修改)。
當我們要操作a的緩存對象時,我們需要找到a的20161124.1825 = 1屬性,根據(jù)這個屬性找到expando為20161124.1825的緩存池,然后找到緩存池中的cache[1],對其進行操作。
當我們要操作a的緩存對象時,我們需要找到a的20161124.1825 = 1屬性,根據(jù)這個屬性找到expando為20161124.1825的緩存池,然后找到緩存池中的cache[1],對其進行操作。
2016-11-24
個人理解(可能有錯誤啊,請高手指點):Data()構(gòu)造函數(shù)本身所要構(gòu)造的就是緩存池對象,因為可能有多個緩存池,所以,為了給每個緩存池一個獨一無二的id,就用了這段代碼:this.expando = jQuery.expando + Math.random();每一個緩存池對象都有expando屬性,這個屬性保存了其自身的id,而且這個id值幾乎不可能與其他緩存池的expando屬性值相同。
然后每個緩存池可能有多個DOM元素映射對象,凡事從屬于這個緩存池的DOM元素都存在一個 與這個緩存池的expando屬性的值相同的屬性,這個屬性保存了自身的映射對象在緩存池中對應(yīng)的key。 字數(shù)限制另起評論
然后每個緩存池可能有多個DOM元素映射對象,凡事從屬于這個緩存池的DOM元素都存在一個 與這個緩存池的expando屬性的值相同的屬性,這個屬性保存了自身的映射對象在緩存池中對應(yīng)的key。 字數(shù)限制另起評論
2016-11-24
不知道我的理解對不對:
1 DOM元素
cache = {id1:{ },id2:{ }......}
DOM.cache_id = some_number // 數(shù)據(jù)類型是數(shù)字
當我們要操作DOM的緩存數(shù)據(jù)時,我們需要訪問他的cache_id屬性,這個屬性的值是數(shù)字類型,取到值以后,使用cache[some_number]就得到了該DOM的緩存數(shù)據(jù)對象。 DOM的cache_id屬性只是保存了映射關(guān)系,并沒有綁定額外的js對象。
2 js對象
緩存數(shù)據(jù)對象直接存儲在該js對象的某個屬性中。操作這個js對象的屬性就是操作這個js的緩存數(shù)據(jù)對象。
1 DOM元素
cache = {id1:{ },id2:{ }......}
DOM.cache_id = some_number // 數(shù)據(jù)類型是數(shù)字
當我們要操作DOM的緩存數(shù)據(jù)時,我們需要訪問他的cache_id屬性,這個屬性的值是數(shù)字類型,取到值以后,使用cache[some_number]就得到了該DOM的緩存數(shù)據(jù)對象。 DOM的cache_id屬性只是保存了映射關(guān)系,并沒有綁定額外的js對象。
2 js對象
緩存數(shù)據(jù)對象直接存儲在該js對象的某個屬性中。操作這個js對象的屬性就是操作這個js的緩存數(shù)據(jù)對象。
2016-11-24
在開發(fā)中,我們可能會為DOM節(jié)點自定義添加很多屬性,如果給DOM元素添加自定義的屬性和過多的數(shù)據(jù)可能會引起內(nèi)存泄漏,所以要盡量避免這么干。(在js中內(nèi)存泄漏的大多情況都是由于DOM節(jié)點與js對象循環(huán)引用引起的) ,為了在給DOM附加額外屬性的同時不引起內(nèi)存泄漏,引入了數(shù)據(jù)緩存系統(tǒng)。
數(shù)據(jù)緩存接口有兩個:$.data() .data()
數(shù)據(jù)緩存接口有兩個:$.data() .data()
2016-11-24