【三】this

前言

明天端午节放假了,晚上要十二点睡觉,定了个闹钟抢小米扫地机器人。前100名只要799,然鹅。。。。
今天白天在想这个事情的时候,觉得感觉猜测前端应该会一进这个页面就让你抢不到??会这样吗?要不然发现请求这么多次,狂点狂点,服务器会挂?

扯回正题。
看到这个this,我还记得我以前还专门做了个笔记,用到的时候查一遍看一遍,因为记不住。网上也有好多题目,this来this去的,绕一绕基本就都答错。
我先亮出自己的笔记。

this的用法

纯粹的函数调用

1
2
3
4
5
6
var x = 1;
function test(){
this.x = 0;
}
test();
alert(x); //0

此时this指向全局

作为对象方法的调用

1
2
3
4
5
6
7
8
function test(){
alert(this.x);
}

var o = {};
o.x = 1;
o.m = test;
o.m(); // 1

此时this指向这个调用的对象

作为构造函数调用

1
2
3
4
5
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); // 1

此时this指向这个new出来的新对象

apply、call

1
2
3
4
5
6
7
8
9
10
11
var x = 0;

function test(){

alert(this.x);

}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。
因此,this指的就是这第一个参数。

this

不知道起什么名字了。
this的使用就是代表一个上下文环境,如果没有this,就需要手动的传入context
然后之前系列一的时候提到了动态作用域,这个this的执行就有点像。
this是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。

箭头函数

es6出现之后,有了箭头函数。箭头函数对this很特殊,它不管this被调用的上下文环境,只管自己在定义的时候的所以的父级的上下文环境。this 总是指向定义时所在的对象。(this绑定)
也就相当于之前的我们常用的会声明一个变量self来保存当前的this,避免因为被调用的的位置的复杂性而让想要的this丢失的情况。

总结

  1. 由new调用? 绑定到新创建的对象。
  2. 由call或者apply(或者bind)调用? 绑定到指定的对象。
  3. 由上下文对象调用? 绑定到那个上下文对象。
  4. 默认: 在严格模式下绑定到undefined,否则绑定到全局对象。

撒花结束!今天对着电脑太久了,玩游戏去了。