課程
/前端開發(fā)
/jQuery
/jQuery源碼解析(架構(gòu)與依賴模塊)
return new ajQuery.fn.init(selector);
init里面直接返回對象出來了,為什么前面還要new呢。
2014-11-03
源自:jQuery源碼解析(架構(gòu)與依賴模塊) 2-3
正在回答
new是用來分隔每個新對象的作用域的,如果不用,那么aQuery.prototype上的屬性就會被污染,就是說所有的對象共享一份aQuery.prototype屬性
如果不用new,返回的是aQuery.prototype,當(dāng)你每次調(diào)用aQuery(selector)的時候返回的都是同一個(aQuery.prototype)對象,一旦對其進行操作就會對所有的造成影響。加new之后對每次返回的對象進行分離,即this被分離,每次都是一個新的實例對象(__proto__屬性引用同一個原型對象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對實例對象操作也只會影響其自身的屬性,而不會影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會改變實例對象的屬性(即使aQuery.prototype有bbb = "ddd"也不會有影響,且調(diào)用的時候會優(yōu)先查找對象自身的屬性)。
不通過new的話,會出錯,因為this是個關(guān)鍵字不能作為對象名稱,它只是作為作用域交接的中間人。根據(jù)前面講的new的4個步驟來說,關(guān)鍵在于第二步,通過this來指向新生成的對象。也就是說return this == return (這個新生成的對象)。
返回的可是this,需要通過操作符new
舉報
由淺入深地剖析jQuery庫的設(shè)計與實現(xiàn),揭開框架背后的秘密
5 回答callback.call 中的call 是什么意思?
1 回答異步是不是多線程?
3 回答還是沒感覺到deferred的好處
2 回答為什么在noConflict()之前加 $(this).text('ceshi'),之后的if (!$)不能顯示了,其后的 if (!$) { show("使用noConflict后,$不存在") }不能正常顯示,這時的$不是已經(jīng)移除控制權(quán)了么?
1 回答下邊代碼看不懂了 jQuery.each(options.match(rnotwhite) || [], function(_, flag) { object[flag] = true; }); return object;
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-04-05
new是用來分隔每個新對象的作用域的,如果不用,那么aQuery.prototype上的屬性就會被污染,就是說所有的對象共享一份aQuery.prototype屬性
2015-03-31
如果不用new,返回的是aQuery.prototype,當(dāng)你每次調(diào)用aQuery(selector)的時候返回的都是同一個(aQuery.prototype)對象,一旦對其進行操作就會對所有的造成影響。加new之后對每次返回的對象進行分離,即this被分離,每次都是一個新的實例對象(__proto__屬性引用同一個原型對象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對實例對象操作也只會影響其自身的屬性,而不會影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會改變實例對象的屬性(即使aQuery.prototype有bbb = "ddd"也不會有影響,且調(diào)用的時候會優(yōu)先查找對象自身的屬性)。
2014-11-20
不通過new的話,會出錯,因為this是個關(guān)鍵字不能作為對象名稱,它只是作為作用域交接的中間人。根據(jù)前面講的new的4個步驟來說,關(guān)鍵在于第二步,通過this來指向新生成的對象。也就是說return this == return (這個新生成的對象)。
2014-11-03
返回的可是this,需要通過操作符new