成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

call、apply、bind的用法小結(jié)

woshicixide / 2358人閱讀

摘要:新手經(jīng)常犯的一個(gè)錯(cuò)誤是將一個(gè)方法從對(duì)象中拿出來(lái),然后再調(diào)用,希望方法中的是原來(lái)的對(duì)象。如果不做特殊處理的話,一般會(huì)丟失原來(lái)的對(duì)象。

call、apply、bind是JavaScript中Function函數(shù)自帶的方法,主要用于改變this的指向 區(qū)別: call()

1.語(yǔ)法:

fun.call(this, arg1,arg2)

2.this取值的幾點(diǎn)說(shuō)明:

(1)處于非嚴(yán)格模式下,指定為null和undefined的this值會(huì)自動(dòng)指向全局對(duì)象(瀏覽器中就是window對(duì)象)

嚴(yán)格模式下:

(2) 如果call方法的參數(shù)是一個(gè)原始值,那么這個(gè)原始值會(huì)自動(dòng)轉(zhuǎn)成對(duì)應(yīng)的包裝對(duì)象,然后傳入call方法

(3)傳遞一個(gè)對(duì)象,則this指向這個(gè)對(duì)象

apply()

apply方法的作用與call方法類似,也是改變this指向,然后再調(diào)用該函數(shù)。
唯一的區(qū)別就是,它接收一個(gè)數(shù)組作為函數(shù)執(zhí)行時(shí)的參數(shù)。

1.語(yǔ)法:

fun.apply(this,[arg1,arg2...])

2.幾個(gè)小應(yīng)用:

(1)結(jié)合Math.max()找出數(shù)組最大項(xiàng)

(2)結(jié)合slice()將偽數(shù)組轉(zhuǎn)化為數(shù)組

啥叫偽數(shù)組:

i.有 0,1,2,3,4,5...n,length 這些 key 的對(duì)象;
ii.原型鏈中沒(méi)有 Array.prototype(如arguments對(duì)象,公有屬性是Object.prototype)

目前已知的偽數(shù)組:

i.arguments對(duì)象;
ii.由document.querySelectAll()返回的對(duì)象

運(yùn)用:

bind()

1.語(yǔ)法:

fun.bind(thisArg[, arg1[, arg2[, ...]]])

2.MDN文檔關(guān)于bind()的用法描述

bind() 最簡(jiǎn)單的用法是創(chuàng)建一個(gè)函數(shù),使這個(gè)函數(shù)不論怎么調(diào)用都有同樣的 this 值。JavaScript新手經(jīng)常犯的一個(gè)錯(cuò)誤是將一個(gè)方法從對(duì)象中拿出來(lái),然后再調(diào)用,希望方法中的 this 是原來(lái)的對(duì)象。(比如在回調(diào)中傳入這個(gè)方法。)如果不做特殊處理的話,一般會(huì)丟失原來(lái)的對(duì)象。從原來(lái)的函數(shù)和原來(lái)的對(duì)象創(chuàng)建一個(gè)綁定函數(shù),則能很漂亮地解決這個(gè)問(wèn)題
var a = 18;
var x = {
    a: 81,
    getA: function() {
        return this.a
    }
};

x.getA(); // 81

var b = x.getA;
b(); // 18(在這種情況下,this指向全局作用域)

// 用bind()創(chuàng)建一個(gè)新函數(shù),使this指向x對(duì)象
var bGetA = b.bind(x);
bGetA(); // 返回 81

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107221.html

相關(guān)文章

  • 理解 JavaScript call()/apply()/bind()

    摘要:理解文章中已經(jīng)比較全面的分析了在中的指向問(wèn)題,用一句話來(lái)總結(jié)就是的指向一定是在執(zhí)行時(shí)決定的,指向被調(diào)用函數(shù)的對(duì)象。與和直接執(zhí)行原函數(shù)不同的是,返回的是一個(gè)新函數(shù)。這個(gè)新函數(shù)包裹了原函數(shù),并且綁定了的指向?yàn)閭魅氲摹? 理解 JavaScript this 文章中已經(jīng)比較全面的分析了 this 在 JavaScript 中的指向問(wèn)題,用一句話來(lái)總結(jié)就是:this 的指向一定是在執(zhí)行時(shí)決定的,...

    duan199226 評(píng)論0 收藏0
  • 全面解析this

    摘要:在嚴(yán)格模式下,對(duì)象的函數(shù)中的指向調(diào)用函數(shù)的對(duì)象實(shí)例顯式綁定,,通過(guò)可以把的綁定到上。間接引用最容易在賦值時(shí)發(fā)生返回目標(biāo)函數(shù)的引用詞法之前介紹的種綁定規(guī)則可以包含所有正常的函數(shù),但是中介紹了一種無(wú)法使用這些規(guī)則的特殊函數(shù)類型箭頭函數(shù)。 this到底指向什么? this關(guān)鍵詞是javaScript中最復(fù)雜的機(jī)制之一,一般有兩個(gè)誤區(qū):1.this指向函數(shù)自身;2.this指向函數(shù)的作用域; ...

    Y3G 評(píng)論0 收藏0
  • bind()、call()、apply()理解及用法

    摘要:首先,我們判斷是否存在方法,然后,若不存在,向?qū)ο蟮脑椭刑砑幼远x的方法。指向調(diào)用它的對(duì)象??傊齻€(gè)的使用區(qū)別都是用來(lái)改變函數(shù)的對(duì)象的指向的第一個(gè)參數(shù)都是要指向的對(duì)象都可以利用后續(xù)參數(shù)傳參是返回對(duì)應(yīng)函數(shù),便于稍后調(diào)用,是立即調(diào)用 apply和call都是為了改變某個(gè)函數(shù)運(yùn)行時(shí)的上下文而存在的(就是為了改變函數(shù)內(nèi)部this的指向),F(xiàn)unction對(duì)象的方法,每個(gè)函數(shù)都能調(diào)用; 使用a...

    hoohack 評(píng)論0 收藏0
  • JavaScript 中 call、apply、bind 用法和區(qū)別

    摘要:和類似,都是調(diào)用函數(shù),并指定函數(shù)的值和參數(shù),區(qū)別在于傳入?yún)?shù)是通過(guò)參數(shù)列表的形式,傳入?yún)?shù)是通過(guò)數(shù)組的形式方法與前兩個(gè)不同,它創(chuàng)建一個(gè)新的函數(shù),在調(diào)用新函數(shù)時(shí),會(huì)調(diào)用原函數(shù),并指定原函數(shù)的值和參數(shù)。執(zhí)行的時(shí)候并沒(méi)有調(diào)用函數(shù)。 簡(jiǎn)介 JavaScript 中有三個(gè)方法Function.prototype.call()、Function.prototype.apply()和Function...

    wind3110991 評(píng)論0 收藏0
  • 復(fù)習(xí)javascript中call,apply,bind用法

    摘要:綁定函數(shù)被調(diào)用時(shí),也接受預(yù)設(shè)的參數(shù)提供給原函數(shù)。一個(gè)綁定函數(shù)也能使用操作符創(chuàng)建對(duì)象這種行為就像把原函數(shù)當(dāng)成構(gòu)造器。 一直很難理解js中的call apply bind,在w3schools,mdn閱讀了,也看了很多相關(guān)的文章,今天我來(lái)寫(xiě)下我理解的call apply bind 首先創(chuàng)建一個(gè)函數(shù) function man(){} man.prototype = { name: ...

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

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

0條評(píng)論

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