首页 > js的循环引用在js中是怎样一个存在,当我的程序出现循环引用我可以把它当做是问题吗,还是无需处理?

js的循环引用在js中是怎样一个存在,当我的程序出现循环引用我可以把它当做是问题吗,还是无需处理?

前奏
方式一

    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


jQuery用第二种不只是要解决构造的问题,还需要解决插件挂载并且挂载后的插件可以共享到this的问题,所以引入域.fn,理论上插件直接挂到jQuery.prototype也行,但是设计上的缺点是没有separation of concern,这样设计的目的,是要分离jQuery core和jQuery外部插件。

【热门文章】
【热门文章】