課程
/前端開發
/jQuery
/jQuery源碼解析(架構與依賴模塊)
return new ajQuery.fn.init(selector);
init里面直接返回對象出來了,為什么前面還要new呢。
2014-11-03
源自:jQuery源碼解析(架構與依賴模塊) 2-3
正在回答
new是用來分隔每個新對象的作用域的,如果不用,那么aQuery.prototype上的屬性就會被污染,就是說所有的對象共享一份aQuery.prototype屬性
如果不用new,返回的是aQuery.prototype,當你每次調用aQuery(selector)的時候返回的都是同一個(aQuery.prototype)對象,一旦對其進行操作就會對所有的造成影響。加new之后對每次返回的對象進行分離,即this被分離,每次都是一個新的實例對象(__proto__屬性引用同一個原型對象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對實例對象操作也只會影響其自身的屬性,而不會影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會改變實例對象的屬性(即使aQuery.prototype有bbb = "ddd"也不會有影響,且調用的時候會優先查找對象自身的屬性)。
不通過new的話,會出錯,因為this是個關鍵字不能作為對象名稱,它只是作為作用域交接的中間人。根據前面講的new的4個步驟來說,關鍵在于第二步,通過this來指向新生成的對象。也就是說return this == return (這個新生成的對象)。
返回的可是this,需要通過操作符new
舉報
由淺入深地剖析jQuery庫的設計與實現,揭開框架背后的秘密
2 回答怎么只有兩節視頻啊
2 回答為什么用相同選擇拿到的jquery對象的uid是一樣的?
1 回答_jQuery和_$值的問題
1 回答jQuery源代碼解析
1 回答jQuery_數據緩存學完總結
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-04-05
new是用來分隔每個新對象的作用域的,如果不用,那么aQuery.prototype上的屬性就會被污染,就是說所有的對象共享一份aQuery.prototype屬性
2015-03-31
如果不用new,返回的是aQuery.prototype,當你每次調用aQuery(selector)的時候返回的都是同一個(aQuery.prototype)對象,一旦對其進行操作就會對所有的造成影響。加new之后對每次返回的對象進行分離,即this被分離,每次都是一個新的實例對象(__proto__屬性引用同一個原型對象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對實例對象操作也只會影響其自身的屬性,而不會影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會改變實例對象的屬性(即使aQuery.prototype有bbb = "ddd"也不會有影響,且調用的時候會優先查找對象自身的屬性)。
2014-11-20
不通過new的話,會出錯,因為this是個關鍵字不能作為對象名稱,它只是作為作用域交接的中間人。根據前面講的new的4個步驟來說,關鍵在于第二步,通過this來指向新生成的對象。也就是說return this == return (這個新生成的對象)。
2014-11-03
返回的可是this,需要通過操作符new