徹底掌握this,call,apply

2022-01-17 09:52:11 字數 2169 閱讀 5058

首先推薦理解call的用法

call的傳參個數不限,第乙個數表示呼叫函式(fx)函式體內this的指向.從第二個引數開始依次按序傳入函式.12

3456

78910

1112

1314

15var age = 40;

var xiaoming = ;

var xiaoli = ;

var getage = function();

getage.call( xiaoming ); //30 表示函式this指向xiaoming

getage.call(xiaoli); //20 表示函式this指向xiaoli

getage.call(undefined);//40 getage.call(undefined)==getage.call(null)

getage.call(null);//40

getage(); //40

如果我們傳入fx.call()的第乙個引數數為null,那麼表示函式fx體內this指向宿主物件,在瀏覽器是window物件,這也解釋了getage.call(undefined);//40。

在此基礎我們可以理解為 getage()相當於getage.call(null/undefined),擴充套件到所有函式,

fx()==fx.call(null) == fx.call(undefined)

值得注意的是嚴格模式下有點區別: this指向null12

3456

7var getage = function();

getage(null);//報錯 age未定義

再來理解this的使用

this的常用場景:12

3456

78910

1112

var name = 'window';

var student =

}student.getname();12

3456

78var name = 'window';

var getname = function ()

console.log( getname() ); //window12

3456

78var name = 'window';

//構造器

var student = function ()

var s1 = new student();

console.log(s1.name); //student

注意: 如果構造器返回的也是乙個object的物件(其他型別this指向不變遵循之前那個規律),這時候this指的是返回的這個objec.12

3456

78910

11var name = 'window';

//構造器

var student = function ()

}var s1 = new student();

console.log(s1.name); //boystudent12

3456

78910

1112

13var name = 'window';

var student =

}student.getname(); // kobe

var s1 = student.getname;

s1(); //window

原因: 此時s1是乙個函式12

3function ()

對乙個基本的函式,前面提過this在基本函式中指的是window.12

3456

7var add = function (a ,b ,c)

再吃透這個題目就ok12

3456

78910

1112

1314

1516

17var a=10;

var foo=

}foo.bar()

//20

(foo.bar)()

//20

(foo.bar=foo.bar)()

//10

(foo.bar,foo.bar)()

//10

**說錯或者有更好的理解希望大家指出來.共同進步.

掌握樹狀陣列 徹底入門

大佬部落格 先貼一下樹狀陣列的模板 int lowbit int i void update int i,int val 單點更新 int sum int i 求區間 1,i 內所有元素的和 return ret 模板中最常見的三個函式 取陣列下標二進位製非0最低位所表示的值 單點更新 區間查詢。樹...

掌握樹狀陣列 徹底入門

先貼一下樹狀陣列的模板 int lowbit int i void update int i,int val 單點更新 int sum int i 求區間 1,i 內所有元素的和 return ret 模板中最常見的三個函式 取陣列下標二進位製非0最低位所表示的值 單點更新 區間查詢。樹狀陣列,顧名...

this指向問題你真的徹底掌握了嗎?

在前端的面試中,this指向與物件導向是必考題,也是日常開發中繞不開的話題,很多前端新手總感覺this指向變化莫測,琢磨不透 也有很多前端老鳥時常在this指向這裡掉坑,本文主要圍繞 this指向 一下,看看你是否真的徹底掌握了。我們可以直接在全域性中向控制台列印 this,檢視指向 在瀏覽器中執行...