关于“通过new把init方法与ajQuery给分离成2个独立的构造器” 的疑问

来源:2-2 分离构造器

hnull

2014-12-24 17:34

"init是ajQuery原型上作为构造器的一个方法,那么其this就不是ajQuery了" --> this是ajQuery.prototype.init()创造的实例。

"所以这里通过new把init方法与ajQuery给分离成2个独立的构造器" --> 这个的确不是很了解。

new ajQuery() 和 ajQuery() 的结果都是一样的(在火狐浏览器控制台下查看), 那ajQuery的原型方法理论上 new ajQuery()创造的实例是无法使用这个原型里面的方法属性的,只能使用ajQuery.prototype.init()这个函数对应的原型里面的方法属性,


问题: ajQuery的构造器好像实际上是没什么用了, new ajQuery()生成的实例 会被 返回的 new ajQuery.prototype.init()  生成的实例覆盖了?



写回答 关注

1回答

  • 艾伦Aaron
    2014-12-29 12:36:22
    已采纳

    这是跟后面的静态与实例设计有关系

    简单的说 jQuery底层是扩展的静态方法,然后共享给实例调用

    开发者通过通过选择器创建的jQuery对象,是实例对象,在原型上大部分的接口都是用来做一个过滤包装的处理,真正的处理都是通过静态方法实现的。


    hnull 回复hnull

    回头来看,是2个独立的构造器,但是new生成的实例是一样的,后面提到的 jquery.prototype.init.prototype = jquery.prototype 就是使无new 变成 有new一样的效果, $('#abc') 就和 new $('#abc') 一样的效果

    2016-01-23 23:41:10

    共 2 条回复 >

jQuery源码解析(架构与依赖模块)

由浅入深地剖析jQuery库的设计与实现,揭开框架背后的秘密

84047 学习 · 280 问题

查看课程

相似问题