普通函數: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。
