在自己的及平等首稿子中 解说了jQuery的盖框架,知道了装有代码都是摹写以了一个自调用匿名函数里面,并且传入了window对象,源码是这般的:

(function( window, undefined ) {...})( window );

 

咱通过alert(jquery) 知道它是一个目的,那么这目的是怎布局出的也?大家使用$(document)类似之写法获取元素,就恍如直接调用了经常的措施一致,jQuery就是惯常的函数吗?如果是构造函数为啥非是 new $(document)的宽泛形式吗?

实际jQuery是面向对象js库,也发构造函数,每一遍调用jQuery方法是不怕会师实例化一个jQeury对象,可是jQuery的写法却至极能干。

第一先谈谈js面向对象:  js尽管不是面向对象的言语,却还要过剩面向对象的写法,这里推荐大家看一下图灵的《javascript高级程序设计》中的面向对象的次设计片。在众格局吃比时使用的写法是构造加原型格局,下边举例:

var Person=function(name,age){
   this.name=name;
   this.age=age;
}
Person.prototype={
  constructor:Person,
  init:function(msg){
    this.say(msg);
  },
  say:function(msg){
  alert(this.name+'说'+msg);
  }
};
var tom=new Person('tom',23); 
tom.init('你好');// tom说你好

 

实际上jQuery也是行使的这种方法只然而用了再次智慧的写法,一起又探jQuery的构造函数有啊两样

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},

 

起点码中能够看于jQuery真正的函数是init方法,当我们调用jQuery时汇合回去new init()的结果如未直new jQuery() .

jQuery.fn是什么呢,在背后大家会相这么平等句子代码

jQuery.fn = jQuery.prototype = {...

 

这样便很好理解了,其实jQuery.fn就是原型对象呢虽然是说于jQuery原型里面有一个init方法,这些点子是真的构造函数。这样形容的补益就不需以写$().init()这样的操作,直接就是最先化了,不过还有一个题目不怕既然init才是构造函数这我们描绘以jQuery下边的那方法实例不是勿可以调用吗?init的实例化自然只好调用init的法门啦,将来看看那般同样句代码

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

 

jQuery,事先说了jQuery.fn=jQuery.protype,这虽象征jQuery的原型对象给予给了init的原型,这样jQuery的原型方法自然init也固然还发出了,通过那样构造模式S使得使用jQuery方法相当简单既非需new jQuery()的操作为无欲手动初阶化就行调用便函数一样简单。

 

相关文章

网站地图xml地图