为了账号安全,请及时绑定邮箱和手机立即绑定

return new ajQuery.fn.init(selector);


init里面直接返回对象出来了,为什么前面还要new呢。

正在回答

6 回答

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下载
官方微信