在我的上一篇文章裡面 闡述了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.fn=jQuery.protype,這就意味著jQuery的原型對象賦給了init的原型,這樣jQuery的原型方法自然init也就都有了,通過這樣構造方式S使得使用jQuery方法非常簡單既不需要new jQuery()的操作也不需要手動初始化就行呼叫普通函數一樣簡單。

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器