您好,登錄后才能下訂單哦!
jquery是面向?qū)ο蟮膶懛ㄒ灿袠嬙旌瘮?shù),每次調(diào)用jquery方法是就會實例化一個jqeury對象,但是jQuery的寫法卻非常高明值得我們學習。
js雖然不是面向?qū)ο蟮恼Z言,卻又很多面向?qū)ο蟮膶懛?,這里推薦大家看一下圖靈的《javascript高級程序設計》中的面向?qū)ο蟮某绦蛟O計部分。在眾多方法中比較常見的寫法是構造加原型方式,下面舉例:
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的構造函數(shù)吧
// 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真正的函數(shù)是init方法,當我們調(diào)用jquery時會new init() 而不是 new jQuery() .
jQuery.fn是啥呢,在后面我們會看到這樣一句代碼 jQuery.fn = jQuery.prototype = {...
這樣就很好理解了,其實jQuery.fn就是原型對象也就是說在jQuery原型里面有一個init方法,這個方法是真正的構造函數(shù)。這樣寫的好處就是不需要在寫$().init()這樣的操作,直接就初始化了,但是還有一個問題就是既然init才是構造函數(shù)那我們寫在jQuery上面的那么方法實例不是不能調(diào)用嗎?init的實例化自然只能調(diào)用init的方法啦,往后看到這樣一句代碼
// Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn;
之前講過jQuery.fn=jQuery.protype,這就意味著jQuery的原型對象賦給了init的原型,這樣jQuery的原型方法自然init也就都有了,通過這樣構造方式S使得使用jQuery方法非常簡單既不需要new jQuery()的操作也不需要手動初始化就行調(diào)用普通函數(shù)一樣簡單。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。