普通函数中内部的this
指向是由其运行时的上下文所决定的。调用方式的不同决定了this 的指向不同,简单的说,就是谁调用该函数,其内部的this就指向谁。
可以分成如下情况:
调用方式 | this的指向 |
普通函数调用 | window |
构造函数调用 | 实例对象 |
对象方法调用 | 该方法所属对象,原型中方法中this指向调用其实例对象 |
事件绑定的方法(事件回调函数) | 事件源对象 |
定时器回调函数 | window |
立即执行函数 | window |
改变函数内部 this 指向
Function.prototype.call、Function.prototype.apply
call和apply方法都可以调用一个函数,并改变函数内部的 this 指向。
两者的区别在于传递参数的情况不同。
call方法的参数长度是可变的,其第一个参数是this指向的对象,第二个与其后的所有参数都是传递给函数的实参。
apply方法的参数长度是固定的,第一个参数是this指向的对象,第二个参数是一个数组(或者伪数组),其中的成员都是传递给函数的实参。
Function.prototype.bind
bind方法不会调用函数, 但会返回一个新的函数,返回的是原函数改变this之后产生的新函数