亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

return new ajQuery.fn.init(selector);


init里面直接返回對象出來了,為什么前面還要new呢。

正在回答

4 回答

new是用來分隔每個新對象的作用域的,如果不用,那么aQuery.prototype上的屬性就會被污染,就是說所有的對象共享一份aQuery.prototype屬性

0 回復 有任何疑惑可以回復我~

如果不用new,返回的是aQuery.prototype,當你每次調用aQuery(selector)的時候返回的都是同一個(aQuery.prototype)對象,一旦對其進行操作就會對所有的造成影響。加new之后對每次返回的對象進行分離,即this被分離,每次都是一個新的實例對象(__proto__屬性引用同一個原型對象aQuery.prototype,故擁有aQuery.prototype所有的屬性),你對實例對象操作也只會影響其自身的屬性,而不會影響aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只會改變實例對象的屬性(即使aQuery.prototype有bbb = "ddd"也不會有影響,且調用的時候會優先查找對象自身的屬性)。

4 回復 有任何疑惑可以回復我~

不通過new的話,會出錯,因為this是個關鍵字不能作為對象名稱,它只是作為作用域交接的中間人。根據前面講的new的4個步驟來說,關鍵在于第二步,通過this來指向新生成的對象。也就是說return this == return (這個新生成的對象)。

1 回復 有任何疑惑可以回復我~

返回的可是this,需要通過操作符new

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號