this指向的7個規(guī)則,騰訊課堂考拉老師哪里學(xué)到的,收益頗深;
規(guī)則:
1.函數(shù)直接用 圓括號() 運行,上下文是window對象;
fn(); // 此時this指向的是window;
2.對象打點調(diào)用函數(shù),上下文是這個對象;
obj.fn(); // 此時this指向的是obj;
3.數(shù)組(類數(shù)組對象)中枚舉出函數(shù),上下文是這個數(shù)組(類數(shù)組對象);
// arr[index](); // 這時候this指向的是arr;
function fun1(fn){
arguments[0](3,4); // arguments[] = fun2 運行時fun2的this指向arguments;
}
function fun2(){
alert(this.length); // 這時候這個this指向的是fun1 的arguments
}
fun1(fun2,4,5,6,7); // 5
4.定時器調(diào)用函數(shù),上下文是window
5.被當(dāng)做事件處理函數(shù)時,上下文是觸發(fā)事件的DOM元素
dom.onclick = function(){
alert(this.innerHTML) // 此時this指向的是dom
}
6.用new調(diào)用函數(shù),上下文是函數(shù)內(nèi)創(chuàng)建的空白對象;
用new調(diào)用函數(shù)會經(jīng)過4步;
①創(chuàng)建一個空對象(這一步很隱秘,看不到)
②將this綁定到這個秘密創(chuàng)建的空對象中
③執(zhí)行語句
④返回對象
7.用apply、call、bind執(zhí)行上下文;
fn.apply(obj,[a,b,c,d]);
fn.call(obj,a,b,c,d);
fn.bind(obj);