中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

深入理解關(guān)于javascript中apply()和call()方法的區(qū)別
來源:易賢網(wǎng) 閱讀:947 次 日期:2016-07-08 11:50:38
溫馨提示:易賢網(wǎng)小編為您整理了“深入理解關(guān)于javascript中apply()和call()方法的區(qū)別”,方便廣大網(wǎng)友查閱!

下面小編就為大家?guī)硪黄钊肜斫怅P(guān)于javascript中apply()和call()方法的區(qū)別。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。

如果沒接觸過動態(tài)語言,以編譯型語言的思維方式去理解javaScript將會有種神奇而怪異的感覺,因為意識上往往不可能的事偏偏就發(fā)生了,甚至覺得不可理喻.如果在學(xué)JavaScript這自由而變幻無窮的語言過程中遇到這種感覺,那么就從現(xiàn)在形始,請放下的您的”偏見”,因為這對您來說絕對是一片新大陸,讓JavaScrip慢慢融化以前一套凝固的編程意識,注入新的生機(jī)!

好,言歸正傳,先理解JavaScrtipt動態(tài)變換運(yùn)行時上下文特性,這種特性主要就體現(xiàn)在apply, call兩個方法的運(yùn)用上.

區(qū)分apply,call就一句話,

foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)

call, apply都屬于Function.prototype的一個方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因為屬于Function.prototype,所以每個Function對象實(shí)例,也就是每個方法都有call, apply屬性.既然作為方法的屬性,那它們的使用就當(dāng)然是針對方法的了.這兩個方法是容易混淆的,因為它們的作用一樣,只是使用方式不同.

相同點(diǎn): 兩個方法產(chǎn)生的作用是完全一樣的

不同點(diǎn): 方法傳遞的參數(shù)不同

那什么是方法產(chǎn)生的作用,方法傳遞的參數(shù)是什么呢?

我們就上面的foo.call(this, arg1, arg2, arg3)展開分析.

foo是一個方法,this是方法執(zhí)行時上下文相關(guān)對象,arg1, arg2, arg3是傳給foo方法的參數(shù).這里所謂的方法執(zhí)行時上下文相關(guān)對象, 如果有面向?qū)ο蟮木幊袒A(chǔ),那很好理解,就是在類實(shí)例化后對象中的this.

在JavaScript中,代碼總是有一個上下文對象,代碼處理該對象之內(nèi). 上下文對象是通過this變量來體現(xiàn)的, 這個this變量永遠(yuǎn)指向當(dāng)前代碼所處的對象中.

為了更好的領(lǐng)會這this是什么,舉個例子.

/創(chuàng)建一個A類

function A(){

//類實(shí)例化時將運(yùn)行以下代碼

//此時的執(zhí)行上下文對象就是this,就是當(dāng)前實(shí)例對象

this.message = “message of a”;

this.getMessage = function(){

<SPAN style="WHITE-SPACE: pre">   </SPAN>return this.message;

<SPAN style="WHITE-SPACE: pre">   </SPAN>}

}

//創(chuàng)建一個A類實(shí)例對象

var a = new A();

//調(diào)用類實(shí)例getMessage方法獲得message值

alert(a.getMessage());

//創(chuàng)建一個B類

function B(){

this.message = ”message of b”;

this.setMessage = function(msg){

<SPAN style="WHITE-SPACE: pre">   </SPAN>this.message = msg;

<SPAN style="WHITE-SPACE: pre">   </SPAN>}

}

//創(chuàng)建一個B類實(shí)例對象

var a = new B();

可見,A, B類都有一個message屬性(面向?qū)ο笾兴f的成員),A有獲取消息的getMessage方法,B有設(shè)置消息的setMessage方法,下面來顯示call的威力.

//給對象a動態(tài)指派b的setMessage方法,注意,a本身是沒有這方法的!

b.setMessage.call(a, “a的消息”);

//下面將顯示”a的消息”

alert(a.getMessage());

//給對象b動態(tài)指派a的getMessage方法,注意,b本身也是沒有這方法的!

這就是動態(tài)語言 JavaScript call的威力所在!

簡直是”無中生有”,對象的方法可以任意指派,而對象本身一直都是沒有這方法的,注意是指派,通俗點(diǎn)就是,方法是借給另一個對象的調(diào)用去完成任務(wù),原理上是方法執(zhí)行時上下文對象改變了.

所以 b.setMessage.call(a, “a的消息”); 就等于用a作執(zhí)行時上下文對象調(diào)用b對象的setMessage方法,而這過程中與b一點(diǎn)關(guān)系都沒有, 作用等效于a.setMessage( “a的消息”);

因為apply與call產(chǎn)生的作用是一樣的,可以說

call, apply作用就是借用別人的方法來調(diào)用,就像調(diào)用自己的一樣.

好,理解了call, apply相同處—–作用后,再來看看它們的區(qū)別,看過上面例子,相信您大概知道了.

從 b.setMessage.call(a, “a的消息”) 等效于 a.setMessage( “a的消息”) 可以看出, “a的消息”在call中作為一個參數(shù)傳遞,

那么在apply中是怎么表示的呢,直接解釋說不清楚,apply要結(jié)合應(yīng)用場景才一目了然.我們來設(shè)計一個應(yīng)用場景:

function print(a, b, c, d){

alert(a + b + c + d);

}

function example(a, b , c , d){

//用call方式借用print,參數(shù)顯式打散傳遞

print.call(this, a, b, c, d);

//用apply方式借用print, 參數(shù)作為一個數(shù)組傳遞,

//這里直接用JavaScript方法內(nèi)本身有的arguments數(shù)組

print.apply(this, arguments);

//或者封裝成數(shù)組

print.apply(this, [a, b, c, d]);

}

//下面將顯示”背光腳本”

example(”背” , “光” , “腳”, “本”);

在這場景中, example方法內(nèi),a, b, c, d作為方法傳遞的參數(shù), 方法分別運(yùn)用了apply, call去借print方法來調(diào)用,

最后一句由于直接調(diào)用example方法, 所以在該方法中的上下文對象this就是window對象.

所以,call, apply方法它們除了第一個參數(shù),即執(zhí)行時上下文對象相同外,call方法的其它參數(shù)將依次傳遞給借用的方法作參數(shù),而apply就兩個參數(shù),第二個參數(shù)為一個數(shù)組傳遞.所以可以說成

call, apply方法區(qū)別是,從第二個參數(shù)起, call方法參數(shù)將依次傳遞給借用的方法作參數(shù), 而apply直接將這些參數(shù)放到一個數(shù)組中再傳遞, 最后借用方法的參數(shù)列表是一樣的.

應(yīng)用場景:

當(dāng)參數(shù)明確時可用call, 當(dāng)參數(shù)不明確時可用apply給合arguments

//例

print.call(window, “背” , “光” , “腳”, “本”);

//foo參數(shù)可能為多個

function foo(){

<SPAN style="WHITE-SPACE: pre">   </SPAN>print.apply(window, arguments);

}

以上這篇深入理解關(guān)于javascript中apply()和call()方法的區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考

更多信息請查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn)

版權(quán)所有:易賢網(wǎng)

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
伊人婷婷欧美激情| 国产精品进线69影院| 欧美性视频一区二区三区| 99久久精品免费观看| 成人18视频日本| 99久久伊人精品| 91色乱码一区二区三区| 91极品视觉盛宴| 在线视频欧美精品| 欧美日韩国产在线观看| 日韩欧美色综合网站| 精品卡一卡二卡三卡四在线| 国产亚洲女人久久久久毛片| 国产精品久99| 亚洲成人777| 国产在线视视频有精品| 国产高清在线观看免费不卡| 成人91在线观看| 欧美日韩一区久久| 精品卡一卡二卡三卡四在线| 欧美国产日韩a欧美在线观看 | 在线免费观看日本欧美| 在线观看成人免费视频| 欧美一二三区在线观看| 国产欧美日本一区视频| 亚洲福利视频导航| 国产精品99精品久久免费| 99re在线视频这里只有精品| 欧美一级日韩免费不卡| 国产精品三级av| 爽好久久久欧美精品| 国产91对白在线观看九色| 欧美手机在线视频| 国产亚洲欧美色| 亚洲国产精品久久久男人的天堂 | 色婷婷精品久久二区二区蜜臀av| 欧美日本一区二区| 精品国产乱码久久久久久闺蜜| 欧美激情综合网| 日韩国产精品久久久久久亚洲| 丁香婷婷综合激情五月色| 欧美人伦禁忌dvd放荡欲情| 国产亚洲欧美日韩日本| 日韩国产在线观看一区| 成人高清免费观看| 精品国产精品网麻豆系列| 亚洲一区二区av在线| 国产乱码精品1区2区3区| 欧美三级在线视频| 亚洲视频免费看| 国产精品一区不卡| 日韩无一区二区| 亚洲福利视频三区| 91国产丝袜在线播放| 国产精品久久夜| 国产精品亚洲а∨天堂免在线| 欧美理论电影在线| 亚洲精品免费在线| 高清不卡在线观看| 26uuu另类欧美亚洲曰本| 丝袜亚洲另类丝袜在线| 欧洲精品视频在线观看| 中文字幕一区二区三区不卡在线| 免费在线观看视频一区| 欧美日韩国产首页在线观看| 一区二区三区在线视频观看58 | 2020日本不卡一区二区视频| 午夜影视日本亚洲欧洲精品| 日本久久电影网| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品一二三在| 国产人妖乱国产精品人妖| 国产99精品国产| 久久精品视频一区二区| 国产精品自在在线| 国产亚洲美州欧州综合国| 国产精品99久久久久久似苏梦涵| 久久尤物电影视频在线观看| 韩国中文字幕2020精品| 久久亚洲精品小早川怜子| 国产成人在线网站| 精品成人一区二区三区四区| 国内精品久久久久影院一蜜桃| 日韩欧美国产一二三区| 国产一区不卡精品| 久久精品网站免费观看| 99国产精品久| 一区二区三区免费看视频| 欧美在线免费观看视频| 日韩精品成人一区二区三区| 精品国产1区2区3区| 国产suv一区二区三区88区| 国产精品国产a| 91免费在线播放| 日韩不卡在线观看日韩不卡视频| 欧美放荡的少妇| 国产成人一区二区精品非洲| 亚洲另类春色国产| 91精品一区二区三区久久久久久 | 欧美日韩国产电影| 欧美影院一区二区| 国产欧美一区二区三区沐欲| 久久精品亚洲精品国产欧美kt∨| 国产日韩欧美高清在线| 2014亚洲片线观看视频免费| 国产91露脸合集magnet| ●精品国产综合乱码久久久久| 91麻豆精品在线观看| 日韩精品一二区| 国产精品麻豆网站| 日韩三区在线观看| 成人综合在线视频| 午夜精品久久久| 国产女同互慰高潮91漫画| 一本大道综合伊人精品热热| 蜜臀精品一区二区三区在线观看| 国产精品美女久久久久久久| 欧美嫩在线观看| 99国产精品久久久| 久久爱www久久做| 亚洲国产欧美在线| 欧美国产欧美综合| 69堂国产成人免费视频| 成人免费视频一区| 日韩电影在线观看一区| 一区二区三区在线影院| 欧美激情在线看| 精品免费日韩av| 欧美另类久久久品| 色综合色狠狠综合色| 国产成人免费高清| 美女视频黄久久| 亚洲国产欧美一区二区三区丁香婷| 国产精品天天摸av网| 91麻豆精品国产91久久久久久久久 | 67194成人在线观看| 99re热这里只有精品免费视频| 国产精品一级黄| 国产资源在线一区| 日韩精彩视频在线观看| 亚洲午夜久久久久久久久电影院 | 亚洲综合色视频| 国产精品萝li| 中文在线免费一区三区高中清不卡| 精品免费日韩av| 日韩欧美一区电影| 日韩精品资源二区在线| 欧美一区二区播放| 日韩一区二区免费视频| 51精品国自产在线| 91精品啪在线观看国产60岁| 欧美顶级少妇做爰| 91精品国产日韩91久久久久久| 欧美嫩在线观看| 日韩精品自拍偷拍| 精品国产91久久久久久久妲己| 亚洲精品在线观| 国产日韩三级在线| 1000精品久久久久久久久| 中文字幕亚洲在| 亚洲午夜免费电影| 蜜桃视频第一区免费观看| 看国产成人h片视频| 国产麻豆精品视频| www.综合网.com| 色婷婷综合久久久久中文| 日本高清视频一区二区| 欧美精品日日鲁夜夜添| 欧美大肚乱孕交hd孕妇| 久久久不卡影院| 一区二区三区资源| 久久精品理论片| av电影在线观看一区| 在线中文字幕不卡| 日韩欧美国产一二三区| 亚洲国产精品ⅴa在线观看| 亚洲资源中文字幕| 极品少妇xxxx精品少妇| 成人深夜在线观看| 3d成人动漫网站| 日本一二三四高清不卡| 五月激情综合色| 福利视频网站一区二区三区| 在线观看日韩国产| 2024国产精品| 亚洲乱码中文字幕| 欧美aⅴ一区二区三区视频| 丁香激情综合五月| 欧美欧美欧美欧美首页| 中日韩av电影| 麻豆久久久久久久| 色偷偷成人一区二区三区91| 日韩欧美第一区| 亚洲综合在线电影| 国产传媒一区在线| 欧美刺激脚交jootjob| 亚洲乱码一区二区三区在线观看| 国产一区二区主播在线| 欧美日韩免费观看一区三区| 国产视频一区在线观看|