call、apply、bind看了必懂

人們常說以上這三個是矯正this指向的列林,但是初次遇到它的人難免有點傻傻分不清楚瑞你,其實你需要的是三個足夠簡單精準的例子來做說明。

  • here we go---apply()
 function sum(num1,num2){
               return num1+num2;
}
function callSum1(num1,num2){
               return sum.apply(this,arguments); //傳入arguments參數(shù)
}
function callSam2(num1,num2){
               return sum.apply(this,[num1,num2]); //傳入數(shù)組
 }
alert(callSam1)(10,10);    //20
alert(callSam2))10,10);    //20

因為當前是在window環(huán)境調(diào)用的所以這個this傳入的就是window對象希痴。

  • call()
function sum(num1,num2){
         return num1+num2;
}
function callSum(num1,num2){
         return sum.call(this,num1,num2);
}
alert(callSum(10,10));   //20

在使用call()方法時者甲,callSum()必須明確傳入每一個參數(shù)。結果與使用apply()沒什么不同砌创,至于是使用apply()還是call(),完全取決于你采取哪種給函數(shù)傳遞參數(shù)的方式更方便虏缸。如果你打算直接傳入arguments對象,或者包含函數(shù)中先接受到的也是一組數(shù)組嫩实,那么使用apply()肯定更方便刽辙;否則,選擇call()可能更合適甲献。(再不給函數(shù)傳遞參數(shù)的情況下宰缤,使用哪個方法都無所謂)

事實上,傳遞參數(shù)并非apply()和call()真正的用武之地晃洒;他們真正強大的地方是能夠擴充函數(shù)賴以運行的作用域.例子來看慨灭。

window.color="red";
var o = {color:"blue"};
function sayColor(){
   alert(this.color)
}
sayColor();                 //red;
sayColor.call(this);        //red;
sayColor.call(window);      //red;
sayColor.call(o);           //blue;函數(shù)的執(zhí)行函數(shù)不一樣了,因為此時函數(shù)體內(nèi)的this指向 了o球及,所以是“blue”
  • bind()
window.color="red";
var o = {color:"blue"};
function sauColor(){
     alert(this.color);
}
var anotherSaycolor = saycolor.bind(o);
anotherSaycolor(); //blue
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氧骤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吃引,更是在濱河造成了極大的恐慌筹陵,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镊尺,死亡現(xiàn)場離奇詭異朦佩,居然都是意外死亡,警方通過查閱死者的電腦和手機鹅心,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門吕粗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旭愧,你說我怎么就攤上這事颅筋。” “怎么了输枯?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵议泵,是天一觀的道長。 經(jīng)常有香客問我桃熄,道長先口,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮碉京,結果婚禮上厢汹,老公的妹妹穿的比我還像新娘。我一直安慰自己谐宙,他們只是感情好烫葬,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凡蜻,像睡著了一般搭综。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上划栓,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天兑巾,我揣著相機與錄音,去河邊找鬼忠荞。 笑死蒋歌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钻洒。 我是一名探鬼主播奋姿,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼素标!你這毒婦竟也來了?” 一聲冷哼從身側響起萍悴,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤头遭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后癣诱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體计维,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年撕予,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲫惶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡实抡,死狀恐怖欠母,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吆寨,我是刑警寧澤赏淌,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站啄清,受9級特大地震影響六水,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一掷贾、第九天 我趴在偏房一處隱蔽的房頂上張望睛榄。 院中可真熱鬧,春花似錦想帅、人聲如沸场靴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憎乙。三九已至,卻和暖如春叉趣,著一層夾襖步出監(jiān)牢的瞬間泞边,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工疗杉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阵谚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓烟具,卻偏偏與公主長得像梢什,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朝聋,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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

  • 本文檔內(nèi)容參考 《JavaScript 闖關記》之函數(shù) 函數(shù)是一段代碼嗡午,它只定義一次,但可以被執(zhí)行或調(diào)用任意次冀痕。在...
    穿越人海遇見你閱讀 994評論 0 1
  • 第一章: JS簡介 從當初簡單的語言荔睹,變成了現(xiàn)在能夠處理復雜計算和交互,擁有閉包言蛇、匿名函數(shù)僻他, 甚至元編程等...
    LaBaby_閱讀 1,651評論 0 6
  • Chapter 5 引用類型 Object類型 創(chuàng)建Object實例new Object()var person ...
    云之外閱讀 389評論 0 0
  • 之前寫過函數(shù)也屬于引用類型,與其他引用類型一樣也是具有屬性和方法腊尚。由于函數(shù)是對象吨拗,繼承自object,因此函數(shù)名實...
    Miss____Du閱讀 5,756評論 4 17
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,216評論 0 4