日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jQuery源码的基础知识

發(fā)布時間:2023/12/2 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jQuery源码的基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

序言:DOM?addEventListener

attachEvent與addEventListener區(qū)別
適應(yīng)的瀏覽器版本不同,同時在使用的過程中要注意
attachEvent方法????????? 按鈕onclick
addEventListener方法??? 按鈕click

一、arguments對象:

1、arguments 屬性

為當前執(zhí)行的function對象返回一個arguments對象。?

2、function.arguments

function參數(shù)是當前執(zhí)行函數(shù)的名稱,可以省略。?

3、arguments.length

arguments 對象的 length 屬性包含了傳遞給函數(shù)的參數(shù)的數(shù)目。arguments 對象所包含的單個參數(shù),訪問方法與數(shù)組中所包含的參數(shù)的訪問方法相同。?

4、arguments當作數(shù)組使用

arguments雖然不是數(shù)組,但可以當作數(shù)組使用,下標由 0 開始,所以:

arguments[0]? 表示接收的第一個參數(shù)
arguments[1]? 表示接收的第二個參數(shù)
……

for (var i = 1; i < arguments.length; i )

?? var s = arguments[i];? ??

5、arguments轉(zhuǎn)換數(shù)組

var args = Array.prototype.slice.call(arguments);?

二、call方法:

語法:call([thisObj[,arg1[, arg2[,?? [,.argN]]]]])

定義:調(diào)用一個對象的一個方法,以另一個對象替換當前對象。

說明:

call 方法可以用來代替另一個對象調(diào)用一個方法。call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。

如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。?

三、apply方法:

語法:apply([thisObj[,argArray]])

定義:應(yīng)用某一對象的一個方法,用另一個對象替換當前對象。

說明:

如果 argArray 不是一個有效的數(shù)組或者不是 arguments 對象,那么將導致一個 TypeError。

如果沒有提供 argArray 和 thisObj 任何一個參數(shù),那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數(shù)。?

四、call方法和apply方法的區(qū)別

call和apply方法通常被用來實現(xiàn)類似繼承一樣的功能,以達到代碼復用的功效。它們的區(qū)別主要體現(xiàn)在參數(shù)上。

Apply:

var v = new fn( " str " );?

// 上一句相當于下面的代碼?

var v = {};?

fn.apply(v, [ "str" ]);

五、prototype原型

1、當我們使用javascript定義一個類的時候,系統(tǒng)會自動生成一個對應(yīng)的原型,而使用類的prototype可以指向這個原型。?

2、定義類的時候,一般使用函數(shù)定義,而那個函數(shù)就是構(gòu)造函數(shù),構(gòu)造函數(shù)可以使用constructor來指定。?

3、當構(gòu)造函數(shù)和prototype定義了相同的屬性或者方法的時候,構(gòu)造函數(shù)的優(yōu)先級要更高。?

4、原型中,不能調(diào)用構(gòu)造函數(shù)的私有變量,和通過傳參傳進來的值。

?5、prototype中定義的變量和屬性都是公有的。?

?6、任何一個類,當有多次實例化的時候,在內(nèi)存中只有一個原型,而構(gòu)造函數(shù)在內(nèi)存中會有多個副本。?

7、在構(gòu)造函數(shù)中可以調(diào)用prototype中的屬性和方法。?

實例:

function fn(){};fn.prototype={pro:'原型'}var o=new fn();alert(o.pro);?

六、匿名函數(shù)自動執(zhí)行(function(){……}())

1. 什么是自執(zhí)行的匿名函數(shù)?

它是指形如這樣的函數(shù): (function {// code})();

?2. 疑問

?為什么(function {// code})();可以被執(zhí)行, 而function {// code}();卻會報錯?

?3. 分析

(1). 首先, 要清楚兩者的區(qū)別:

?(function {// code})是表達式, function {// code}是函數(shù)聲明.

?(2). 其次, js"預編譯"的特點:

js在"預編譯"階段, 會解釋函數(shù)聲明, 但卻會忽略表式.

?(3). 當js執(zhí)行到function() {//code}();時, 由于function() {//code}在"預編譯"階段已經(jīng)被解釋過, js會跳過function(){//code}, 試圖去執(zhí)行();, 故會報錯;

當js執(zhí)行到(function {// code})();時, 由于(function {// code})是表達式, js會去對它求解得到返回值, 由于返回值是一 個函數(shù), 故而遇到();時, 便會被執(zhí)行.

另外, 函數(shù)轉(zhuǎn)換為表達式的方法并不一定要靠分組操作符(),我們還可以用void操作符,~操作符,!操作符……

如:?

!function(){????? alert("另類的匿名函數(shù)自執(zhí)行");??? }();?

七、自定義的extend靜態(tài)方法

方法一:

var fn=function(){};fn.extend = function(o, p) { if ( !p ) {p = o; o = this;} for ( var i in p )o[ i ] = p[ i ];alert(o[ i ]);alert(o);return o;}fn.extend({method:function(){alert("靜態(tài)方法");}});fn.method(); //靜態(tài)方法

方法二:

var fn=function(){};fn.extend = function() { var options,target = arguments[0] || {};if ( !options ) {options = target; target = this;} for ( var i in options )target[ i ] = options[ i ];//執(zhí)行對象直接量,把options[ i ]裝載到target[ i ],最后返回target新對象。return target;}fn.extend({method:function(){alert("靜態(tài)方法");}});fn.method();

源碼解析如下:

?

var options={a:function(){alert("a");},b:function(){alert("b");}}var target={};for ( var i in options )target[i]=options[i];//復制對象,重新裝載target.a(); //a

  

????????????????????????????????????

?

方法三:

var fn=function(){};Object.extend = function(destination, source) {for (property in source) {destination[property] = source[property];}return destination;}Object.prototype.extend = function(object) {return Object.extend.apply(this, [this, object]);}fn.extend({method:function(){alert("靜態(tài)方法");}});fn.method();

?


更多專業(yè)前端知識,請上 【猿2048】www.mk2048.com

總結(jié)

以上是生活随笔為你收集整理的jQuery源码的基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。