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
覺得老師對memory的解釋有些歧義,看完了這節(jié)課,我覺得 本例中的memory變量是保存了當前的fire函數(shù)的參數(shù),每次添加一個新的觀察者函數(shù),就用當前的memory變量作為參數(shù)調(diào)用這個添加的觀察者函數(shù)一次。
2016-11-21
memory = options === 'memory' && data; 我一直以為memory的最終結(jié)果為true或者false,現(xiàn)在我才發(fā)現(xiàn)原來我沒有弄明白 與 的真諦! 假如 options === ‘memory’ 的話,memory = data。 其余情況 memory = false
2016-11-21
隨著后面課程的學(xué)習(xí),發(fā)現(xiàn)jQuery的實現(xiàn)方式跟我想的不一樣啊,我的實現(xiàn)思路就是實現(xiàn)一個被觀察者池,為每一個被觀察者命名;而jQuery則是在函數(shù)內(nèi)部定義一個觀察者數(shù)組,然后使用閉包的方式返回一個對象;如果用我的方法的話,還得額外檢測名字是否重復(fù)。問世間是否有山比此山更高,一山還比一山高啊
2016-11-21
今天又看了一遍,發(fā)現(xiàn)以前對這節(jié)課的理解是錯的!! 第19行, arguments.callee 指的是setTimeout內(nèi)的函數(shù),指的不是Aaron ??! 大家可以添加一句console.log(arguments.callee)試試。
另外我一直思考,為啥要用setTimeout函數(shù),百度得到了這個答案:settimeout的作用機制其實是把函數(shù)加入到全局(window)的空間里的任務(wù)隊列
另外我一直思考,為啥要用setTimeout函數(shù),百度得到了這個答案:settimeout的作用機制其實是把函數(shù)加入到全局(window)的空間里的任務(wù)隊列
2016-11-20
@javaeye 觀察不仔細?。? 明明是 callee 不是 call!
callee返回正在執(zhí)行的函數(shù)本身的引用,它是arguments的一個屬性!
callee返回正在執(zhí)行的函數(shù)本身的引用,它是arguments的一個屬性!
2016-11-20
@小姜姜姜姜 'arguments.callee(List) 這句話可以換成 Aaron(List,callback) 這樣的話就需要每次執(zhí)行25毫秒'
建議不要換,因為如果換了的話,以后我們需要對函數(shù)重命名的話,那我們就得改兩處。
建議不要換,因為如果換了的話,以后我們需要對函數(shù)重命名的話,那我們就得改兩處。
2016-11-20