国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺談jQuery構造函數分析

2024-05-06 16:19:51
字體:
來源:轉載
供稿:網友

jquery的構造函數很好的運用的javascript的充分利用了JavsScript語言的動態性——對行參的類型和個數沒有的嚴格要求,以至于一個函數可以實現多種功能需求,也為JavaScript語言的多態性提供了基礎,在這個構造函數中,提供了六種不同的調用格式(根據官方API文檔)

在我的上一篇文章里面 闡述了jQuery的大致框架,知道了所有代碼都是寫在了一個自調用匿名函數里面,并且傳入了window對象,源碼是這樣的:

 

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

我們通過alert(jquery) 知道它是一個對象,那么這個對象是怎么構造出來的呢?我們使用$(document)類似的寫法獲取元素,就好像直接調用了普通的方法一樣,jQuery就是普通的函數嗎?如果是構造函數為什么不是 new $(document)的常見形式呢?

其實jQuery是面向對象js庫,也有構造函數,每次調用jQuery方法是就會實例化一個jQeury對象,但是jQuery的寫法卻非常高明。

首先先談談js面向對象: js雖然不是面向對象的語言,卻又很多面向對象的寫法,這里推薦大家看一下圖靈的《javascript高級程序設計》中的面向對象的程序設計部分。在眾多方法中比較常使用的寫法是構造加原型方式,下面舉例:

 

 
  1. var Person=function(name,age){ 
  2. this.name=name; 
  3. this.age=age; 
  4. Person.prototype={ 
  5. constructor:Person, 
  6. init:function(msg){ 
  7. this.say(msg); 
  8. }, 
  9. say:function(msg){ 
  10. alert(this.name+'說'+msg); 
  11. }; 
  12. var tom=new Person('tom',23);  
  13. tom.init('你好');// tom說你好 

其實jQuery也是采用的這種方式只不過用了更聰明的寫法,一起再看看jQuery的構造函數有什么不同

 

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

從源碼中可以看到在jQuery真正的函數是init方法,當我們調用jQuery時會返回new init()的結果而不直接new jQuery() .

jQuery.fn是啥呢,在后面我們會看到這樣一句代碼

 

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

這樣就很好理解了,其實jQuery.fn就是原型對象也就是說在jQuery原型里面有一個init方法,這個方法是真正的構造函數。這樣寫的好處就是不需要在寫$().init()這樣的操作,直接就初始化了,但是還有一個問題就是既然init才是構造函數那我們寫在jQuery上面的那么方法實例不是不能調用嗎?init的實例化自然只能調用init的方法啦,往后看到這樣一句代碼

 

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

之前講過jQuery.fn=jQuery.protype,這就意味著jQuery的原型對象賦給了init的原型,這樣jQuery的原型方法自然init也就都有了,通過這樣構造方式S使得使用jQuery方法非常簡單既不需要new jQuery()的操作也不需要手動初始化就行調用普通函數一樣簡單。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 桐梓县| 宜宾县| 南靖县| 西充县| 三亚市| 调兵山市| 嘉祥县| 海原县| 章丘市| 麻城市| 类乌齐县| 金山区| 五原县| 吴江市| 卢湾区| 赤峰市| 大英县| 通山县| 邯郸县| 安宁市| 大竹县| 阳山县| 文安县| 东方市| 元朗区| 株洲市| 沭阳县| 淳安县| 宁安市| 炉霍县| 孟州市| 雅江县| 永德县| 达孜县| 泗水县| 昭通市| 蚌埠市| 罗田县| 泰和县| 景德镇市| 济宁市|