• jQuery.core_02


    在上一节中有提到,jQuery对象的实例化实质上是调用了init构造器。即使不让init构造器成为jQuery函数的原型链的成员函数也不会有大的影响。

    下面粗略看一下jQuery.prototype对象

    jQuery.fn = jQuery.prototype = {
        
        //为什么要将constructor设置为jQuery
        constructor: jQuery,
    
        //初始化jQuery实例的长度
        length: 0,
    
        //将该实例转换成数组
        toArray: function(){
            return slice.call( this );
        },
    
        //通过下标来获取对象
        //如果没有传参数,或参数小于0
        get: function( num ){
    
            return num != null ?
                ( num < 0 ? this[ num + this.length ]) : this[ num ] :
    
                slice.call( this );
        },
    
        pushStack: function( elems ){
            // console.log( this.constructor === jQuery); //true
            var ret = jQuery.merge( this.constructor(),elems);
    
            ret.preObject = this;
    
            return ret;
        },
    
    
        each: function( callback ){
            return jQuery.each( this, callback );
        },
    
        map: function( callback ){
            return this.pushStack( jQuery.map( this, function( elem, i ){
                return callback.call( elem, i, elem );
            } ) );
        },
    
        slice: function(){
            return this.pushStack( slice.apply( this, arguments ));
        },
    
        first: function(){
            return this.eq(0);
        },
    
        last: function(){
            return this.eq(-1);
        },
    
        eq: function(i){
            var len = this.length,
                j = +i + ( i < 0 : len : 0);
    
            return this.pushStack( j>= 0 && j < len ? [ this[ j ] ] : [] );
        },
    
        end: function(){
            return this.preObject || this.constructor();
        },
    
        push: push,
        sort: arr.sort,
        splice: arr.splice
    }

    这里的代码读起来不费劲,只是有个问题要提出下: 为什么在jQuery.prototype对象里要强制的将constructor设置为jQuery?

    其实上一节有提到过,jQuery的实例化是通过init构造函数来实现的。每个实例对象都是有constructor的属性的,这个constructor

    是对构造器的引用, 正常情况下,这个constructor属性保存着对init函数的引用,不过,由于设置了 init.prototype = jQuery.prototype.

    这是constructor 是内部的Object构造函数。

  • 相关阅读:
    iOS沙盒机制
    iOS网络图片缓存SDWebImage
    iOS缓存到sandbox
    iOS缓存到内存
    网络语音技术
    iOS的影片播放 MediaPlayer 和 AVPlayer
    IOS上MediaPlayer framework实现视频播放
    线程间通信共享变量和queue
    如何进行多线程编程
    python的并发GIL 了解
  • 原文地址:https://www.cnblogs.com/branches/p/4890487.html
Copyright © 2020-2023  润新知