jQuery.fn.init

$() 即调用了jQuery.fn.init方法

jQuery = function( selector, context ) {
    return new jQuery.fn.init( selector, context, rootjQuery );
}

jQuery通过new原型prototype上的init方法当作构造器,那么init的原型链方法就是实例的方法了,所以jQuery通过2个构造器划分2种不同的调用方式,一种是静态,一种是原型。
方法是共享的,并且实例方法取于静态方法,2个构造器是完全隔离的 ,这个要如何处理?

jQuery.fn = jQuery.prototype = {
    name: 'cc',
    init: function( selector, context, rootjQuery ) {
    var match, elem;
    if ( !selector ) {
        return this;
    }
    if ( typeof selector === "string" ) {
       // code
    } else if ( selector.nodeType ) {
       this.context = this[0] = selector;
       this.length = 1;
       return this;
    } else if ( jQuery.isFunction( selector ) ) {
       return rootjQuery.ready( selector );
    }
    if ( selector.selector !== undefined ) {
       this.selector = selector.selector;
       this.context = selector.context;
    }
    return jQuery.makeArray( selector, this );
    }
    constructor: jQuery
}
jQuery.fn.init.prototype = jQuery.fn;

通过原型传递解决问题,把jQuery的原型传递给jQuery.prototype.init.prototype。换句话说jQuery的原型对象覆盖了init构造器的原型对象,因为是引用传递所以不需要担心这个循环引用的性能问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值