課程
/前端開(kāi)發(fā)
/jQuery
/jQuery源碼解析(架構(gòu)與依賴模塊)
return new ajQuery.fn.init(selector);
init里面直接返回對(duì)象出來(lái)了,為什么前面還要new呢。
2014-11-03
源自:jQuery源碼解析(架構(gòu)與依賴模塊) 2-3
正在回答
new是用來(lái)分隔每個(gè)新對(duì)象的作用域的,如果不用,那么aQuery.prototype上的屬性就會(huì)被污染,就是說(shuō)所有的對(duì)象共享一份aQuery.prototype屬性
如果不用new,返回的是aQuery.prototype,當(dāng)你每次調(diào)用aQuery(selector)的時(shí)候返回的都是同一個(gè)(aQuery.prototype)對(duì)象,一旦對(duì)其進(jìn)行操作就會(huì)對(duì)所有的造成影響。加new之后對(duì)每次返回的對(duì)象進(jìn)行分離,即this被分離,每次都是一個(gè)新的實(shí)例對(duì)象(__proto__屬性引用同一個(gè)原型對(duì)象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對(duì)實(shí)例對(duì)象操作也只會(huì)影響其自身的屬性,而不會(huì)影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會(huì)改變實(shí)例對(duì)象的屬性(即使aQuery.prototype有bbb = "ddd"也不會(huì)有影響,且調(diào)用的時(shí)候會(huì)優(yōu)先查找對(duì)象自身的屬性)。
不通過(guò)new的話,會(huì)出錯(cuò),因?yàn)閠his是個(gè)關(guān)鍵字不能作為對(duì)象名稱,它只是作為作用域交接的中間人。根據(jù)前面講的new的4個(gè)步驟來(lái)說(shuō),關(guān)鍵在于第二步,通過(guò)this來(lái)指向新生成的對(duì)象。也就是說(shuō)return this == return (這個(gè)新生成的對(duì)象)。
返回的可是this,需要通過(guò)操作符new
舉報(bào)
由淺入深地剖析jQuery庫(kù)的設(shè)計(jì)與實(shí)現(xiàn),揭開(kāi)框架背后的秘密
1 回答ajQuery.fn.init.prototype = ajQuery.fn 這里兩個(gè)構(gòu)造器大多數(shù)用在上面地方
2 回答
1 回答
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-04-05
new是用來(lái)分隔每個(gè)新對(duì)象的作用域的,如果不用,那么aQuery.prototype上的屬性就會(huì)被污染,就是說(shuō)所有的對(duì)象共享一份aQuery.prototype屬性
2015-03-31
如果不用new,返回的是aQuery.prototype,當(dāng)你每次調(diào)用aQuery(selector)的時(shí)候返回的都是同一個(gè)(aQuery.prototype)對(duì)象,一旦對(duì)其進(jìn)行操作就會(huì)對(duì)所有的造成影響。加new之后對(duì)每次返回的對(duì)象進(jìn)行分離,即this被分離,每次都是一個(gè)新的實(shí)例對(duì)象(__proto__屬性引用同一個(gè)原型對(duì)象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對(duì)實(shí)例對(duì)象操作也只會(huì)影響其自身的屬性,而不會(huì)影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會(huì)改變實(shí)例對(duì)象的屬性(即使aQuery.prototype有bbb = "ddd"也不會(huì)有影響,且調(diào)用的時(shí)候會(huì)優(yōu)先查找對(duì)象自身的屬性)。
2014-11-20
不通過(guò)new的話,會(huì)出錯(cuò),因?yàn)閠his是個(gè)關(guān)鍵字不能作為對(duì)象名稱,它只是作為作用域交接的中間人。根據(jù)前面講的new的4個(gè)步驟來(lái)說(shuō),關(guān)鍵在于第二步,通過(guò)this來(lái)指向新生成的對(duì)象。也就是說(shuō)return this == return (這個(gè)新生成的對(duì)象)。
2014-11-03
返回的可是this,需要通過(guò)操作符new