jquery 源码笔记共享原型

场景:$()创建实例对象

过程:

$() 方法调用式的无new 创建实例对象,其实是需要在调用的方法本本身返回一个

实例化对象,$本身就代表了Jquery 所以说 $() 这个方法的需求就是实例化自己但

是要通过方法返回。

例1:下面这个方法按照既定的思路返回了自身的实例化对象,但是当 new jQuwery()

创建实例的时候,同样的jQuery() 方法被调用了,又开始 new jQuwery() 创建实例

陷入循环。

(function(root){

var jQuery = function(){

return new jQuery();

}

root.$=root.jQuery=jQuery;

}(this))

怎么解决这个问题,jQuery 提出了 共享原型。首先需要了解一个构造函数在实例化的

过程中经历了什么,还有原型的概念。

new jQuery() 在 new 的时候先执行了 jQuery 这个函数,然后创建了一对象,并且这个对

象成为了被实例化函数的上下文。然后这个新的对象的原型__proto__会引用构造函数的

prototype。注意这里是引用类型。也就是说每个实例化对象都会包含构造函数prototype

原型对象的引用。来看具体实现

(function(root){

var jQuery = function(){

return new jQuery.prototype.init();

}

//在jQuery函数的原型对象中定义了init方法,然后再把init方法作为构造函数

//把它的原型对象共享给jQuery的原型对象,对象之间的赋值是引用类型,那

//我们的原型就共享了。

jQuery.prototype.init.prototype=jQuery.prototype;

root.$=root.jQuery=jQuery;

}(this))

你可能感兴趣的:(javascript,jquery)