亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

JavaScript直接調用函數與call調用的區別實例分析

瀏覽:4日期:2023-10-26 09:53:35

本文實例講述了JavaScript直接調用函數與call調用的區別。分享給大家供大家參考,具體如下:

直接調用

直接調用函數是最常見 最普通的方式,直接以函數附加的對象作為調用者, 在函數后括號內傳入參數來調用函數

例如:

window.alert('測試代碼');

其中調用者如果是window可以省略, 即直接alert('測試代碼');

以call() 方法調用函數

語法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);

新同學看來好像直接調用就夠了, 其實不然, 直接調用函數方式簡單易用但不夠靈活, 有些時候調用函數時需要動態地傳入一個函數的引用,此時為了動態地調用函數,就需要使用call方法來調用了

舉個例子:

<script type='text/javascript'>var each =function(array,fn){ for(var index in array) { fn.call(null,index,array[index]); }}each([4,20,3],function (index,ele){ document.write('第'+index+'個元素是'+ele+'<br/>');} );</script>

乍看可能比較暈, 注意fn.call語句, call調用的格式是在參數第一個填調用者,后邊按順序輸入參數, 參數形式比較特別, 與直接調用不同,調用者不寫在前面, 而是參數第一項. 格式: fn.call(obj,args);

看到這里大家應該會有疑問, call到底和直接調用有什么區別, 區別就在于call調用修改了this指針的指向, 如果被調用的函數里壓根沒用到this也就沒有什么區別了

再舉一個被調用函數有this指針的例子:

var x = '我是全局變量';//定義全局變量xfunction a(){ //定義函數類結構a  this.x = '我是在函數類結構a中聲明的哦';}//定義普通函數,彈出當前指針所包含的變量x的值function f(){ alert (this.x);}//返回值為“我是在函數類結構a中聲明的哦”f.call(new a());

我的理解是,f.call(new a())就是把函數(其實也是對象)f復制到被調用對象“new a()”下面去解析,事實上和下面這段代碼的解析結果一樣:

function a(){this.x = '我是在函數類結構a中聲明的哦';alert(this.x);}a();

事實上,是在調用f.call()的時候,修改了f()中的this指向。本來,f中的this.a,this.b屬性都是自身的,但是通過f.call()調用時,傳入了一個新的對象e()(this),這樣,將e綁定到了f的this中,本來是給f增加的屬性,加到了e中。(e與e(),f與f()都是等價的)有點類似于“繼承”,但是這個應該叫 JS中對象冒充

以apply()方式調用函數

apply() 方法與call()方法的功能節本相似 ,都可以用來動態地調用函數. apply()與call()的區別如下:

通過call()調用函數時必須在括號中詳細地列出每個參數 apply()動態地調用函數時, 需要以數組的形式一次性傳入所有調用參數

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

比如下面的兩個語句是相等的:

myfun.call(window,12,13);myfun.capply(window,[12,13]);

修改this指針這點上,apply()與call()也保持一致,

大體上來說apply()與call()只在傳參形式上有些差別而已.

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《JavaScript常用函數技巧匯總》、《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚洲成年看片在线观看男男 | 亚洲国产99999在线精品一区 | 亚洲综合精品一区二区三区中文 | 最新97超级碰碰碰碰久久久久 | 2021最新国产成人精品免费 | 91精选在线观看 | 一级一级毛片免费播放 | 一级毛片日本特黄97人人 | 婷婷色综合 | 男女日批视频在线永久观看 | 成人午夜做爰视频免费看 | 国产女人毛片 | 国产欧美在线观看一区二区 | 国产一级一级片 | 国产免费a级片 | 久久久久久网址 | 一级a毛片| 国产男同志gay毛片欧美 | 欧美不卡一区二区三区免 | 国产在线精品成人一区二区三区 | 成人午夜小视频手机在线看 | 日韩亚洲欧美在线爱色 | 五月婷婷丁香久久 | 经典三级第一页 | 免费一区二区三区在线视频 | 亚洲一区免费观看 | 男女啪啪免费观看网站 | 亚洲 欧美 自拍 卡通 综合 | 一级毛片一片毛 | 一级特黄特交牲大片 | 精品欧美一区二区三区 | 国产精品久久久亚洲第一牛牛 | 免费黄在线看 | 青青草99热久久 | 国产精品1区2区 | 国产女人体一区二区三区 | 久久午夜一区二区 | 综合久久久久6亚洲综合 | 国产成人精品美女在线 | 免费三级网址 | 爱爱激情视频 |