美文网首页
当我们使用$()时到底发生了什么

当我们使用$()时到底发生了什么

作者: 拾大花sdf | 来源:发表于2017-06-05 12:44 被阅读14次

当我们使用$()时到底发生了什么

1.$是jQuery的别名,$()和jQuery是等价的

 window.jQuery = window.$ = jQuery;

2.jQuery构造函数

    // Define a local copy of jQuery
    jQuery = function( selector, context ) {

    // The jQuery object is actually just the init constructor 'enhanced'
    // Need init if jQuery is called (just allow error to be thrown if not included)
    return new jQuery.fn.init( selector, context );
},

在javascript中,构造函数如果有返回值时,运算符 new所创建的对象会被丢弃,返回值将作为new表达式的值,jQuery利用了这一特性,通过在构造函数jQuery()内部用运算符new创建并返回另一个构造函数的实例,省去了构造函数jQuery()前面的new,即我们创建jQuery对象时可以省略new,直接写jQuery()。

3.jQuery.fn和jQuery.prototype 是等价的

 jQuery.fn = jQuery.prototype

4.既然jQuery()构造函数返回的是jQuery.fn.init()构造函数产生的实例,那么代码中所有挂载在jQuery.fn上的函数,jQuery()创建的实例是不能调用的。因为jQuery(),jQuery.fn.init()两个构造函数的原型不一样产生的实例也是不同的,jQuery是通过下面的代码解决的。

// Give the init function the jQuery prototype for later instantiation
init = jQuery.fn.init = function( selector, context, root ) {
    
    
}
init.prototype = jQuery.fn;

5.当我们使用$()时就是返回了一个 以jQuery.fn.init( selector, context )为构造函数的对象,这个对象的原型是jQuery.

模仿这个过程的小例子

    <script type="text/javascript">
        var Q=function(){
            return new Q.fn.init();
        }

        Q.fn=Q.prototype;
        Q.fn.init=function(){
            return this;
        }
        Q.sayhi=function(){
            console.log('hi');
        }
        Q.fn.sayHello=function(){
            console.log('hello');
        }
        Q.fn.init.prototype=Q.prototype;//如果去掉这一行 下面的qq.sayHello() 无法执行
        Q.sayhi();
        

        var qq =  Q();
        console.log(qq);
        qq.sayHello();

    </script>

参考资料

1.jQuery技术内幕:深入解析jQuery架构设计与原理实现 -- 高云

相关文章

  • 当我们使用$()时到底发生了什么

    当我们使用$()时到底发生了什么 1.$是jQuery的别名,$()和jQuery是等价的 2.jQuery构造函...

  • 当 XXX 时,到底发生了什么

    当你开启电脑时,它发生了什么 当你输入一个网址的时候,实际会发生什么 当你访问淘宝的时候,发生了什么 for 循环...

  • 当JavaScript使用new时发生了什么

    函数是怎么工作的 一. new是干嘛的? new操作符用来生成一个新的对象, 它后面必须跟上一个函数(否则, 会抛...

  • 当···时发生了什么?

    当···时发生了什么? 这个仓库试图回答一个古老的面试问题:当你在浏览器中输入 google.com 并且按下回车...

  • Redis 命令执行过程(上)

    今天我们来了解一下 Redis 命令执行的过程。在之前的文章中《当 Redis 发生高延迟时,到底发生了什么》我们...

  • 闭包

    如何产生闭包? 当一个内部函数引用了外部函数的变量时,就产生了闭包? 闭包到底是什么? 使用chrome调试查看理...

  • 实现模型和心理模型

    《About Face 4》中提及过“我们试图知道人们使用数字产品时到底发生了什么,以及设计在将编码转化为用户可以...

  • Java 1.8 ArrayList 源码分析

    我们声明一个初始容量为1的ArrayList。看看在add时候到底发生了什么。 当声明的容量小于10时的情况 执行...

  • css选择器优先级

    /* * 当使用不同的选择器,选中同一个元素时并且设置相同的样式时, * 这时样式之间产生了冲突,最终到底采用哪...

  • 使用@property时发生了什么

    @property 其实就是在编译阶段由编译器自动帮我们生成ivar成员变量getter方法,setter方法。使...

网友评论

      本文标题:当我们使用$()时到底发生了什么

      本文链接:https://www.haomeiwen.com/subject/hiyifxtx.html