03静态与实例方法共享设计
遍历方法:
$('.arron').each() // 作为实例方法存在 $.each() // 作为静态方法存在
jQuery源码:
<script> jQuery.prototype = { each: function(callback, args) { return jQuery.each(this.callback, args) } } </script>
实例方法取于静态方法,换句话来说这是静态与实例方法共享设计,静态方法挂在jQuery构造器上,原型方法挂在哪里呢?
jQuery通过new原型prototype上的init方法当作构造器,那么init的原型链方法就是实例的方法了,所以jQuery通过2个构造器划分2种不同的调用方式一种是静态,一种是原型。
看看jQuery给的方案:
画龙点睛的一处init.prototype = jQuery.fn,把jQuery.prototype原型的引用赋给jQuery.fn.init.prototype的原型,这样就把2个构造器的原型给关联起来了。
<script> aQuery.fn = ajQuery.prototype = { name: 'fri', init: function(selector) { this.selector = selector; return this; }, constroctor: ajQuery }
ajQuery.fn.init.prototype = ajQuery.fn </script>
这段代码就是整个结构设计的最核心的东西了,有这样的一个处理,整个结构就活了!不得不佩服作者的设计思路,别具匠心
通过原型传递解决问题,把jQuery的原型传递给jQuery.prototype.init.prototype。 换句话说jQuery的原型对象覆盖了init构造器的原型对象,因为是引用传递所以不需要担心这个循环引用的性能问题。
