this
- 在普通函数下this 指向window
- 有事件源的指向事件源本身
- 在对象下this指向的是自己本身
- 定时器中的this 也指向window,除了es6
总结 从上面可以看出this只有3种状态:1.window 2.实例化之后的对象本身 3.事件源 下面是对中这种3种状态的解释。
1. Bom操作时,函数在实例化之前,this都会指向window,实例化之后的对象this指向对象本身。
2. DOM操作时,this指向执行方法。
3. this分为dom和bom操作两种不一样的状态。
4. 特殊: 定时器调用this的时候,就算在实例化对象中,this也会指向window。
原因是 定时器是window的方法,window.setTimeout里面的函数的this就是执行window了。
5. 箭头函数:
1)函数体内的this就是定义时所在的对象,而不是使用时所在的对象。
2)不可以当做构造函数,也就是说,不可以用new命令实例化函数为对象,否则会抛出一个错误。(因为没有this,所以不能当做构造函数)
3) 不可以是用arguments对象,改对象在函数体内不存在,如果要用,可以用rest参数代替。
4)不可以是用yield命令,因此箭头函数不能用作Generator函数。
从第二条来看,箭头函数不能被实例化,也就是说:
show= y= y;
new show() //报错哦
按照原理来说,不能实例化的函数this就会指向window;
也就是我们第一条所说的,定义时所在的对象,如果我们在window环境中定义,这个箭头函数就会永远指向window。
总结: this指向的是 定义时this指向的对象,-> 永不改变。