首先推薦理解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,檢視指向 在瀏覽器中執行...