箭頭函式中的this指向
阿新 • • 發佈:2019-01-26
普通函式:this指向分為4種情況,
1. obj.getName();//指向obj
2.getName();//非嚴格模式下,指向window,嚴格模式下為undefined
3. var a = new A();
a();//指向A本身
4.getName().apply(obj);//指向obj
箭頭函式:箭頭函式本身是沒有this和arguments的,在箭頭函式中引用this實際上是呼叫的是定義時的上一層作用域的this。
這裡強調的是上一層作用域,是因為物件是不能形成獨立的作用域的。
例如:
(1)、
var obj = { say: function() { var f1 = ()=>{ console.log("1111",this); } f1(); } } var o = obj.say;
o();//f1執行時,say函式指向window,所以f1中的this指向window
obj.say();//f1執行時,say函式指向obj,所以f1中的this指向obj;
(2)、
var ojb = {
pro: {
getPro: ()=>{
console.log(this);
}
}
}
obj.pro.getPro();//this指向的是window,因為箭頭函式定義時,getPro的上一級是pro,是一個物件,不能形成單獨的作用域,故指向window。