问答详情
源自:2-3 静态与实例方法共享设计

return new ajQuery.fn.init(selector);


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

提问者: 我不愿,让你一个人 2014-11-03 17:03

个回答

  • paraofheaven
    2016-04-05 11:16:04

    new是用来分隔每个新对象的作用域的,如果不用,那么aQuery.prototype上的属性就会被污染,就是说所有的对象共享一份aQuery.prototype属性

  • 5am
    2015-03-31 16:55:30

    如果不用new,返回的是aQuery.prototype,当你每次调用aQuery(selector)的时候返回的都是同一个(aQuery.prototype)对象,一旦对其进行操作就会对所有的造成影响。加new之后对每次返回的对象进行分离,即this被分离,每次都是一个新的实例对象(__proto__属性引用同一个原型对象aQuery.prototype,故拥有aQuery.prototype所有的属性),你对实例对象操作也只会影响其自身的属性,而不会影响aQuery.prototype。好比,aQuery("aaa").bbb = "ccc"只会改变实例对象的属性(即使aQuery.prototype有bbb = "ddd"也不会有影响,且调用的时候会优先查找对象自身的属性)。

  • 雪狼_0008
    2014-11-20 10:19:40

    不通过new的话,会出错,因为this是个关键字不能作为对象名称,它只是作为作用域交接的中间人。根据前面讲的new的4个步骤来说,关键在于第二步,通过this来指向新生成的对象。也就是说return this == return (这个新生成的对象)。

  • 艾伦Aaron
    2014-11-03 20:31:19

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