前言
明天端午节放假了,晚上要十二点睡觉,定了个闹钟抢小米扫地机器人。前100名只要799,然鹅。。。。
今天白天在想这个事情的时候,觉得感觉猜测前端应该会一进这个页面就让你抢不到??会这样吗?要不然发现请求这么多次,狂点狂点,服务器会挂?
扯回正题。
看到这个this,我还记得我以前还专门做了个笔记,用到的时候查一遍看一遍,因为记不住。网上也有好多题目,this来this去的,绕一绕基本就都答错。
我先亮出自己的笔记。
this的用法
纯粹的函数调用
1 | var x = 1; |
此时this
指向全局
作为对象方法的调用
1 | function test(){ |
此时this
指向这个调用的对象
作为构造函数调用
1 | function test(){ |
此时this
指向这个new出来的新对象
apply、call
1 | var x = 0; |
apply()
是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。
因此,this
指的就是这第一个参数。
this
不知道起什么名字了。this
的使用就是代表一个上下文环境,如果没有this
,就需要手动的传入context
。
然后之前系列一的时候提到了动态作用域
,这个this
的执行就有点像。this
是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this
的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
箭头函数
es6
出现之后,有了箭头函数。箭头函数对this
很特殊,它不管this
被调用的上下文环境,只管自己在定义的时候的所以的父级的上下文环境。this
总是指向定义时所在的对象。(this
绑定)
也就相当于之前的我们常用的会声明一个变量self
来保存当前的this
,避免因为被调用的的位置的复杂性而让想要的this
丢失的情况。
总结
- 由new调用? 绑定到新创建的对象。
- 由call或者apply(或者bind)调用? 绑定到指定的对象。
- 由上下文对象调用? 绑定到那个上下文对象。
- 默认: 在严格模式下绑定到undefined,否则绑定到全局对象。
撒花结束!今天对着电脑太久了,玩游戏去了。