为什么jQuery要返回jQuery.fn.init对象

张恕鑫 发布于 2013/04/28 11:13
阅读 8K+
收藏 1

在Jquery源码中是这么定义的

jQuery = function( selector, context ) {
  // The jQuery object is actually just the init constructor 'enhanced'
  return new jQuery.fn.init( selector, context, rootjQuery );
},

然后通过Jquery.fn = Jquery.prototype和Jquery.fn.init.prototype=Jquery.fn把它们联系在一起。

为什么要这么做呢?为什么定义Jquery的时候不直接实现而是让Jquery.fn.init实现呢?

真心不懂,请大神们不吝赐教。

 

加载中
0
戴威
戴威
因为需要初始化。
0
Mike_Liu
Mike_Liu
因为$('#id') 需要返回对象 所以需要return new 一个  但$('#id')返回的对象虽都叫做jquery对象,但其实构造方法中return 并不都是相同类型的对象 需要慢慢体会吧。。
0
张恕鑫
张恕鑫

谢谢各位的解答,大致是了解了。理解这个问题的关键是new关键字。

我的理解大致是这样的:如果是Jquery自己实现的话也可以,但是像原本的$("#id")就要写成new $("#id")。因为直接调用方法并且方法体内没有return的话返回的是undefined,即使return this,其实他的this是指的window。jQuery的这种写法更像是一种的工厂模式,每次都会返回一个jQuery实例,然后继续调用各种方法。

再次谢谢各位。

0
JqbR001
JqbR001
对的,所以可以链式操作。
0
返回顶部
顶部