场景:$()创建实例对象
过程:
$() 方法调用式的无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))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。