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

过程:

$() 方法调用式的无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))


印第安老鹌鹑
24 声望3 粉丝

杜昕宇不让我写简介