Javascript基礎(chǔ)進階(七) call()爽哎,apply()蜓席,bind()

call,apply,bind是做什么的?

都是天生自帶的方法(Function.prototype),
所有的函數(shù)都可以調(diào)取這三個方法

一般用來指定this的環(huán)境?涡俊(改變this指向)
首先咱們復(fù)習(xí)一下之前學(xué)到的知識點:

// 1
var a = {
    user:"浮云先生",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
b(); //undefined



// 2
var a = {
    user:"浮云先生",z
    fn:function(){
        console.log(this.user);
    }
}
a.fn(); //浮云先生

如果有不明白的同學(xué)請看第六章關(guān)于this指向厨内。
但是有時候我們不得不將這個對象保存到另外的一個變量中,那么就可以通過以下方法:

1. call()

fn.call(context, para1, ...)
把fn函數(shù)執(zhí)行渺贤,并且讓fn函數(shù)中的this變?yōu)閏ontext雏胃,而para1和...是給fn傳遞的實參

var a = {
    user:"浮云先生",
    fn:function(){
        console.log(this.user); //浮云先生
    }
}
var b = a.fn;
b.call(a);

通過在call方法,給第一個參數(shù)添加要把b添加到哪個環(huán)境中志鞍,簡單來說瞭亮,this就會指向那個對象。
call方法除了第一個參數(shù)以外還可以添加多個參數(shù)固棚,如下:

var a = {
    user:"浮云先生",
    fn:function(s,ss){
        console.log(this.user); //浮云先生
        console.log(s+ss); //3
    }
}
var b = a.fn;
b.call(a,1,2);

2. apply()

fn.apply(context, [para1, ...])
把fn函數(shù)執(zhí)行统翩,并且讓fn函數(shù)中的this變?yōu)閏ontext,而para1和...是給fn傳遞的實參

var a = {
    user:"浮云先生",
    fn:function(){
        console.log(this.user); //浮云先生
    }
}
var b = a.fn;
b.apply(a);

同樣apply也可以有多個參數(shù)此洲,但是不同的是厂汗,第二個參數(shù)必須是一個數(shù)組,如下:

var a = {
    user:"浮云先生",
    fn:function(s,ss){
        console.log(this.user); //浮云先生
        console.log(s+ss); //11
    }
}
var b = a.fn;
b.apply(a,[10,1]);

注意:如果call和apply的第一個參數(shù)寫的是null呜师,那么this指向的是window對象

var a = {
    user:"浮云先生",
    fn:function(){
        console.log(this); //Window 
    }
}
var b = a.fn;
b.apply(null);

3.bind()

bind方法和call娶桦、apply方法有些不同,不過他們都是用來改變this指向汁汗。

var a = {
    user:"浮云先生",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
var c = b.bind(a);
console.log(c); // fn---> function() { [native code] }
c(); // ---> 浮云先生

實際上bind方法返回的是一個修改過后的函數(shù).那我們賦值一個變量執(zhí)行函數(shù)得到浮云先生趟紊。

同樣bind也可以跟多個參數(shù),如下:

var a = {
    user:"浮云先生",
    fn:function(e,d,f){
        console.log(this.user); //浮云先生
        console.log(e,d,f); //10 1 2
    }
}
var b = a.fn;
var c = b.bind(a,10);
c(1,2);

覺得寫的不錯的小伙伴點贊加關(guān)注哦碰酝! (=?ω?=)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戴差,隨后出現(xiàn)的幾起案子送爸,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袭厂,死亡現(xiàn)場離奇詭異墨吓,居然都是意外死亡,警方通過查閱死者的電腦和手機纹磺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門帖烘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人橄杨,你說我怎么就攤上這事秘症。” “怎么了式矫?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵乡摹,是天一觀的道長。 經(jīng)常有香客問我采转,道長聪廉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任故慈,我火速辦了婚禮板熊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘察绷。我一直安慰自己干签,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布克婶。 她就那樣靜靜地躺著筒严,像睡著了一般。 火紅的嫁衣襯著肌膚如雪情萤。 梳的紋絲不亂的頭發(fā)上鸭蛙,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音筋岛,去河邊找鬼娶视。 笑死,一個胖子當(dāng)著我的面吹牛睁宰,可吹牛的內(nèi)容都是我干的肪获。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柒傻,長吁一口氣:“原來是場噩夢啊……” “哼孝赫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起红符,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤青柄,失蹤者是張志新(化名)和其女友劉穎伐债,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體致开,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡峰锁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了双戳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虹蒋。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖飒货,靈堂內(nèi)的尸體忽然破棺而出魄衅,到底是詐尸還是另有隱情,我是刑警寧澤膏斤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布徐绑,位于F島的核電站,受9級特大地震影響莫辨,放射性物質(zhì)發(fā)生泄漏傲茄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一沮榜、第九天 我趴在偏房一處隱蔽的房頂上張望盘榨。 院中可真熱鬧,春花似錦蟆融、人聲如沸草巡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽山憨。三九已至,卻和暖如春弥喉,著一層夾襖步出監(jiān)牢的瞬間郁竟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工由境, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棚亩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓虏杰,卻偏偏與公主長得像讥蟆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纺阔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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