首先看看this的常见的指向
调用方式 | this指向 |
---|---|
普通函数 | window |
构造函数 | 实例对象 |
对象方法调用 | 该方法所属对象 |
事件绑定方法 | 绑定事件对象 |
定时器函数 | window |
立即执行函数 | window |
首先看两道题
第一题:
var name = '11'
var obj = {
name: 'jack',
say: function () {
console.log(this.name); /
}
}
obj.say()
这个函数里面的this是指向 obj 对象里面的jack,也就是上面表格所写的对象方法调用,this执行该方法所属的对象。
第二题:
var name = '11'
var obj = {
name: 'jack',
say: () => {
console.log(this.name);
}
}
obj.say()
注意:箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this。
有人肯定会觉得为什么要打印的是全局的name的。
下面细解
对象是没有函数作用域的,所以箭头函数定义在全局作用域下,也就是window里面
下面的这个代码是更好的体现箭头函数是没有this的。
指向的是函数定义位置的上下文this。
,千万记住是函数定义的上下文,不是对象定义的上下文。
function fn (){
console.log(this); //打印的是 {name:'zs'}
return ()=>{
console.log(this) //打印的是 {name:'zs'}
}
}
const obj = {name: 'zs'}
fn.call(obj);