了解this

全局作用域默認(rèn)是window

console.log(this)
20170519105959.png

像這樣直接打出來(lái)看到當(dāng)前this指向window

function fn(){
    console.log(this)
}
20170519113631.png

在全局函數(shù)里也指向window

在對(duì)象中

var obj = {
    a:'xxx',
    b: function(){
        return this.a
    }
}
20170519121020.png

看到在obj 這個(gè)對(duì)象中 return的 this.a 這個(gè)this是obj

綁定this

1.call()

func.call(指定this, 參數(shù)1, 參數(shù)2, ...)

函數(shù)實(shí)例的call方法,可以指定函數(shù)內(nèi)部this的指向(即函數(shù)執(zhí)行時(shí)所在的作用域),然后在所指定的作用域中,調(diào)用該函數(shù)。


0170519150407.png

2.apply()

func.apply(指定this, [參數(shù)1, 參數(shù)2, ...])

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

3.bind()
bind方法用于將函數(shù)體內(nèi)的this綁定到某個(gè)對(duì)象,然后返回一個(gè)新函數(shù)。

var add = function (x, y) {
  return x * this.m + y * this.n;
}

var obj = {
  m: 2,
  n: 2
};

var newAdd = add.bind(obj, 5);

newAdd(5)

bind方法除了綁定this對(duì)象,還將add函數(shù)的第一個(gè)參數(shù)x綁定成5,然后返回一個(gè)新函數(shù)newAdd,這個(gè)函數(shù)只要再接受一個(gè)參數(shù)y就能運(yùn)行了。

ES6 函數(shù)

()=>{}

這種函數(shù)不會(huì)改變this

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 7,004評(píng)論 15 54
  • 特別說(shuō)明,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 816評(píng)論 0 1
  • 與其他語(yǔ)言相比,函數(shù)的this關(guān)鍵字在JavaScript中的表現(xiàn)略有不同,此外,在嚴(yán)格模式和非嚴(yán)格模式之間也會(huì)有...
    codingC閱讀 639評(píng)論 0 0
  • 1. this之謎 在JavaScript中,this是當(dāng)前執(zhí)行函數(shù)的上下文。因?yàn)镴avaScript有4種不同的...
    百里少龍閱讀 1,093評(píng)論 0 3
  • 坦白講,后知后覺(jué)的濁某向來(lái)對(duì)行為藝術(shù)了解的不多,剛看新聞,一個(gè)女孩子因?yàn)橐淮螀⒂^便決心投身行為藝術(shù)的領(lǐng)域,這興許是...
    化濁閱讀 192評(píng)論 0 0

友情鏈接更多精彩內(nèi)容