国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

簡(jiǎn)單使用.call() 和 .apply()

jsyzchen / 661人閱讀

摘要:你可以直接看例子,也可以先讀一下介紹和是為了動(dòng)態(tài)改變而出現(xiàn)的,當(dāng)一個(gè)沒有某個(gè)方法,但是其他的有,我們可以借助或用其它對(duì)象的方法來(lái)操作。它不能應(yīng)用下的等方法。這一段來(lái)源知乎楊志

你可以直接看例子,也可以先讀一下介紹:

call和apply是為了動(dòng)態(tài)改變this而出現(xiàn)的,當(dāng)一個(gè)object沒有某個(gè)方法,但是其他的有,我們可以借助call或apply用其它對(duì)象的方法來(lái)操作。

call, apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對(duì)象實(shí)例,也就是每個(gè)方法都有call, apply屬性.既然作為方法的屬性,那它們的使用就當(dāng)然是針對(duì)方法的了.這兩個(gè)方法是容易混淆的,因?yàn)樗鼈兊淖饔靡粯?只是使用方式不同.
從上面可以得出 call, apply 是給方法使用的,為了改變調(diào)用該方法的 this指針

簡(jiǎn)單例子:

call

function A() {
    this.getName = function (xx) {
        return xx;
    }
}

function B() {

}

var a = new A();
console.log( a.getName("i am A")  ); //i am A

var b = new B() ;
console.log( a.getName.call(b,"i am B") );  // i am B

B 函數(shù)中沒有 任何方法 , A 函數(shù)有個(gè) getName() 方法 ,a.getName() 自然成立 ,但 B 也要使用 getName() 的方法怎么辦呢 ? 那就用 call(this,"參數(shù)") !!

可以 再理解一下這句話 -- 我們可以借助call或apply調(diào)用其它對(duì)象的方法來(lái)操作,call和apply是為了動(dòng)態(tài)改變this而出現(xiàn)的 ,本來(lái) a.getName() 的 this 指向 a, call 動(dòng)態(tài)的 把 this 指向了 b ,變成了 b.getName()

apply
apply 與 call 只是參數(shù)的使用不同而已

function A() {
    this.sun = function (a ,b) {
        return a+b;
    }
}

function B() {

}

var a = new A();
console.log( a.sun(1,2)  ); //3

var b = new B() ;
console.log( a.sun.call(b,2,2) );  // 4

console.log( a.sun.apply(b,[3, 3]) );  //6

call和apply一般使用情況

用的比較多的,通過document.getElementsByTagName選擇的dom 節(jié)點(diǎn)是一種類似array的array。它不能應(yīng)用Array下的push,pop等方法。我們可以通過:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就可以應(yīng)用Array下的所有方法了。 --這一段來(lái)源: 知乎-楊志

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/80418.html

相關(guān)文章

  • callapply bind的簡(jiǎn)單使用方法

    摘要:也就是說,區(qū)別就是,當(dāng)你希望改變上下文環(huán)境之后并非立即執(zhí)行,而是回調(diào)執(zhí)行的時(shí)候,使用方法而則會(huì)立即執(zhí)行函數(shù)。 - call、apply:在 javascript 中,call 和 apply 都是為了改變某個(gè)函數(shù)運(yùn)行時(shí)的上下文(context)而存在的,換句話說,就是為了改變函數(shù)體內(nèi)部 this 的指向。 JavaScript 的一大特點(diǎn)是,函數(shù)存在「定義時(shí)上下文」和「運(yùn)行時(shí)上下文」以...

    Harriet666 評(píng)論0 收藏0
  • 可能遇到假的面試題:不用callapply方法模擬實(shí)現(xiàn)ES5的bind方法

    摘要:來(lái)自朋友去某信用卡管家的做的一道面試題,用原生模擬的方法,不準(zhǔn)用和方法。他們的用途相同,都是在特定的作用域中調(diào)用函數(shù)。不同之處在于,方法傳遞給調(diào)用函數(shù)的參數(shù)是逐個(gè)列出的,而則是要寫在數(shù)組中。 本文首發(fā)我的個(gè)人博客:前端小密圈,評(píng)論交流送1024邀請(qǐng)碼,嘿嘿嘿?。 來(lái)自朋友去某信用卡管家的做的一道面試題,用原生JavaScript模擬ES5的bind方法,不準(zhǔn)用call和bind方法。 ...

    李世贊 評(píng)論0 收藏0
  • 可能遇到假的面試題:不用callapply方法模擬實(shí)現(xiàn)ES5的bind方法

    摘要:來(lái)自朋友去某信用卡管家的做的一道面試題,用原生模擬的方法,不準(zhǔn)用和方法。他們的用途相同,都是在特定的作用域中調(diào)用函數(shù)。不同之處在于,方法傳遞給調(diào)用函數(shù)的參數(shù)是逐個(gè)列出的,而則是要寫在數(shù)組中。 本文首發(fā)我的個(gè)人博客:前端小密圈,評(píng)論交流送1024邀請(qǐng)碼,嘿嘿嘿?。 來(lái)自朋友去某信用卡管家的做的一道面試題,用原生JavaScript模擬ES5的bind方法,不準(zhǔn)用call和bind方法。 ...

    ConardLi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<