前奏:方式一 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
添加回答
举报
0/150
提交
取消