this

this 的值到底是什么这难?一次說清楚

1、apply造垛、call 魔招、bind的作用與區(qū)別?

call、apply 調(diào)用一個函數(shù)五辽,傳入函數(shù)執(zhí)行上下文及參數(shù)
call仆百、apply 通過設(shè)置函數(shù)內(nèi)部的this和函數(shù)的參數(shù)來調(diào)用函數(shù)并返回函數(shù)的返回結(jié)果

fn.call(context, param1, param2...)   
fn.apply(context, paramArray)

第一個參數(shù)都是希望設(shè)置的this對象,不同之處在于call方法接收參數(shù)列表奔脐,而apply接收參數(shù)數(shù)組

fn.bind(thisArg[, arg1[, arg2[, ...]]])
  • thisArg 當(dāng)綁定函數(shù)被調(diào)用時俄周,該參數(shù)會作為原函數(shù)運行時的 this 指向吁讨。當(dāng)使用new操作符調(diào)用綁定函數(shù)時,該參數(shù)無效峦朗。
  • arg1, arg2, ... 當(dāng)綁定函數(shù)被調(diào)用時建丧,這些參數(shù)將置于實參之前傳遞給被綁定的方法。
    返回一個新函數(shù)波势,新函數(shù)與被調(diào)函數(shù)(綁定函數(shù)的目標(biāo)函數(shù))具有相同的函數(shù)體翎朱,并且指定函數(shù)內(nèi)部的 this 為傳入的第一個參數(shù)。綁定函數(shù)被調(diào)用時尺铣,bind() 也接受預(yù)設(shè)的參數(shù)提供給原函數(shù)拴曲。

bind() 最簡單的用法是創(chuàng)建一個函數(shù),使這個函數(shù)不論怎么調(diào)用都有同樣的 this 值凛忿。

紅框中的內(nèi)容是等價的

bind 把函數(shù)的this及部分參數(shù)固定為某個值澈灼,返回一個新的函數(shù),調(diào)用新的函數(shù)的時候可以繼續(xù)傳入?yún)?shù)店溢,最終已固定的參數(shù)和繼續(xù)傳入的參數(shù)會一起傳給原函數(shù)叁熔,并把原函數(shù)的返回值返回。

curry (自動bind)每次都固定剩下的參數(shù)床牧,直到傳入的參數(shù)達到預(yù)定數(shù)量以后才真正調(diào)用原函數(shù)并返回荣回。一般來說curry不會傳入this

2、練習(xí)

1: 下面代碼輸出什么戈咳,為什么

var john = { 
  firstName: "John" 
}
function func() { 
  alert(this.firstName + ": hi!")    //彈出 John: hi!
}
john.sayHi = func
john.sayHi()    //等價于john.sayHi.call(john)心软,this指向的是john  

2: 下面代碼輸出什么,為什么

func()    //等價于 func.call(undefined)著蛙,可以簡寫為 func.call()
function func() { 
  alert(this)    //彈出window
}

按理說打印出來的 this 應(yīng)該就是 undefined 了吧糯累,但是瀏覽器里有一條規(guī)則:

  • 如果你傳的 context 是 null 或者 undefined,那么 window 對象就是默認的 context(嚴(yán)格模式下默認 context 是 undefined)

3:下面代碼輸出什么

document.addEventListener('click', function(e){
    console.log(this);    //document册踩,綁定事件中的this指向事件源
    setTimeout(function(){
        console.log(this);    //window泳姐,setTimeout、setInterval這兩個方法執(zhí)行的函數(shù)this也是全局對象
    }, 200);
}, false);

4:下面代碼輸出什么暂吉,why

var john = { 
  firstName: "John" 
}

function func() { 
  alert( this.firstName )     //彈出John
}
func.call(john)    // call()傳入的第一個參數(shù)是希望設(shè)置的this對象胖秒,指定了this為john

5: 以下代碼有什么問題,如何修改

var module= {
  bind: function(){
    var _this = this    //保存一個this
    $btn.on('click', function(){
      console.log(this) //this指什么:事件綁定的回調(diào)函數(shù)中的this是指綁定的元素慕的,這里this指$btn
      _this.showMsg();    //但是$btn上是沒有showMsg方法的阎肝,需要使用剛才保存的this
    })
  },
  
  showMsg: function(){
    console.log('lalala');
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肮街,隨后出現(xiàn)的幾起案子风题,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沛硅,死亡現(xiàn)場離奇詭異眼刃,居然都是意外死亡,警方通過查閱死者的電腦和手機摇肌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門擂红,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人围小,你說我怎么就攤上這事昵骤。” “怎么了肯适?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵变秦,是天一觀的道長。 經(jīng)常有香客問我框舔,道長蹦玫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任雨饺,我火速辦了婚禮钳垮,結(jié)果婚禮上惑淳,老公的妹妹穿的比我還像新娘额港。我一直安慰自己,他們只是感情好歧焦,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布移斩。 她就那樣靜靜地躺著,像睡著了一般绢馍。 火紅的嫁衣襯著肌膚如雪向瓷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天舰涌,我揣著相機與錄音猖任,去河邊找鬼。 笑死瓷耙,一個胖子當(dāng)著我的面吹牛朱躺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搁痛,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼长搀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸡典?” 一聲冷哼從身側(cè)響起源请,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谁尸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舅踪,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年症汹,在試婚紗的時候發(fā)現(xiàn)自己被綠了硫朦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡背镇,死狀恐怖咬展,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞒斩,我是刑警寧澤破婆,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站胸囱,受9級特大地震影響祷舀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烹笔,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一裳扯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谤职,春花似錦饰豺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饶套,卻和暖如春漩蟆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妓蛮。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工怠李, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛤克。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓捺癞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咖耘。 傳聞我的和親對象是個殘疾皇子翘簇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 第十二章(2) “大頭,人抓來了儿倒,現(xiàn)在是怎么著鞍姹!呜笑?”一名男子叼著煙,吐著煙圈彻犁,問著旁邊的男人叫胁。 “行了,一會你把她...
    花蓉兒閱讀 285評論 0 3
  • 在我們班有一個大家說認識也認識汞幢,但是一旦不見他時間長了大家就可能會忘記他驼鹅,所以我給他起了一個外號叫沉默,因為...
    李jing源閱讀 643評論 0 0
  • 中醫(yī)認為钓辆,羊肉味甘而不膩剪验,具有補腎壯陽、暖中祛寒前联、溫補氣血功戚、開胃健脾的功效,所以冬天吃羊肉似嗤,既能抵御風(fēng)寒啸臀,又可滋補...
    多爾特楊閱讀 376評論 0 1