在普通情况下我们要用原生类、或者自定义类创建实例要用new运算符,使构造函数创建一个实例,并且实例继承构造器prototype上的所有共有方法。如 new Object()、new Date()等等!(object有{},数组有[]这样的快捷方式 ,我们主要探讨new这种方式。)
我们在使用jQuery时从来没有使用过new,他是不是用其他方法来生成实例呢?是不是没有使用prototype属性呢?事实上他都有使用,只是内部处理的非常巧妙,提高了使用的爽快度。我们来看看他的源码
funtion jQuery( selector, context){
return new jQuery.fn.init( selector, context );
}
这里可以看出jQuery是有构造函数的,也是用了new 创建实例的。那么jQuery.fn是什么呢?后面有个这样的处理:
jQuery.fn = jQuery.prototype={
init:function (){}
}
这样我们就明白了,jQuery的构造函数是他原型上的init方法,而不是function jQuery。这样的话每次调用$()他都会用jQuery原型上的init创建一个实例,那么新的问题来了。如果用init创建实例的话,这个对象继承的是init的prototype上的方法而不会继承jQuery prototype上的方法,那么他是怎么实现原型继承的呢?
jQuery.fn.init.prototype = jQuery.fn;
这里他有一个这样的处理,把jQuery.fn赋值给了jQuery.fn.init.prototype ,这一步很关键。我门看看这些是什么。
jQuery.fn是jQuery.prototype
jQuery.fn.init.prototype是jQuery.prototype.init.prototype
这个处理相当于:
jQuery.prototype = jQuery.prototype.init.prototype
那么每当我们调用$()是,jQuery就会用new运算符调用他prototype上的init创建一个实例,这个由init创建实例会继承jQuery protype上的所有方法,并且这个实例的__proto__内部属性会指向jQuery的prototype属性。
另外我们注意到这个处理:
jQuery.fn = jQuery.prototype
这是他为了避免频繁的操作jQuery.prototype,所以用jQuery.fn缓存了jQuery.prototype。
这些的处理实在是非常巧妙,内部处理了实例创建不用使用者用new去生成实例,又非常漂亮的处理了prototype保证多实例共享方法减少资源开支,约翰哥真的不简单。
分享到:
相关推荐
在普通情况下我们要用原生类、或者自定义类创建实例要用new运算符,使构造函数创建一个实例,并且实例继承构造器prototype上的所有公有方法
jquery经典实例60例-动画实例 jquery经典实例60例-动画实例 jquery经典实例60例-动画实例
50个Jquery经典实例50个Jquery经典实例
Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与实例Jquery 学习与...
50个Jquery经典实例 50个Jquery经典实例 50个Jquery经典实例 50个Jquery经典实例
jquery应用实例 jquery应用实例 jquery应用实例
jquery 实例jquery 实例jquery 实例jquery 实例jquery 实例jquery 实例
jquery 实例jquery 实例jquery 实例jquery 实例jquery 实例jquery 实例jquery 实例jquery 实例
JQuery应用实例学习(强烈推荐)---无私奉献了!!
jquery表格操作实例jquery表格操作实例jquery表格操作实例jquery表格操作实例
jquery简单实例代码,适合初学者入门。
这是《PHP与jQuery开发实例》这本书的源码,书中的代码没有光盘提供光盘。这里的源码是从官网下载下来的,如果嫌麻烦的同学可以下载去用
教程名称:jQuery实例视频教程课程目录:【】jQuery实例-商城放大镜效果【】jQuery实例-图片放大效果【】jQuery实例-图片转动立体效果【】jQuery实例-对联广告【】jQuery实例-返回顶部(解决IE6固定定位)【】jQuery...
jquery easyui 实例与api
jquery 时间控件实例jquery 时间控件实例jquery 时间控件实例jquery 时间控件实例jquery 时间控件实例
jquery mobile 实例,非常好的学习实例
jquery实例教程jquery实例教程jquery实例教程jquery实例教程jquery实例教程
PHP jquery SWFUpload 实例
jQuery Mobile实例 web html html5