前奏:
方式一
jQuery = function(selector) { if(!(this instanceof jQuery)){ return new jQuery(selector); } this.selector = selector; return this }
方式二
var $$ = jQuery = function(selector) { //把原型上的init作为构造器 return new jQuery.fn.init( selector ); } jQuery.fn = jQuery.prototype = { init: function(selector) { this.selector = selector; return this; }, constructor: jQuery } jQuery.fn.init.prototype = jQuery.fn
俩种方式都能实现在使用时的无new构造实例像大家常用的那样( $()就可以得到实例),好像大家一致觉得第二种方式比较好,而jq也采用的这种方式,但是这种方式绕了一大圈最后通过继承原型链的方式(也就是jQuery.fn.init.prototype = jQuery.fn这段代码)解决了无new构造新实例,并解决了无限构造自身的问题,但最终却引来了循环引用(jq的原型上的方法的原型指向了jq的原型)的问题;
问题,循环引用不知道是否可以被推荐使用。大家好像都不在意这些,大家怎么看待循环引用呢,我现在对于循环引用在js中的存在感觉到困惑?**
相关信息可以参考更多前辈的详解,http://www.imooc.com/code/3398
阿晨1998
相关分类