当前位置: 移动技术网 > IT编程>开发语言>JavaScript > jQuery中创建实例与原型继承揭秘

jQuery中创建实例与原型继承揭秘

2018年10月09日  | 移动技术网IT编程  | 我要评论

如 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保证多实例共享方法减少资源开支。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网