this是一个js中的保留关键字,他指的是执行当前函数的执行上下文环境。也可以说this指针指向的是调用当前函数的那个环境对象;他是在函数执行的时候而不是词法语法分析的时候确定的,所以this的指向就比较复杂,我们一般可以将this指针分为以下四种情况
一,全局直接调用(指向的是全局作用域window)
因为在全局调用函数,就相当于在window对象上调用函数;所以this指向的是window对象
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function aaa(){ console.log(this) } aaa() setTimeout(function () { console.log(this) }) //因为setTime是window对象的y指向的也是window let obj = { fun: () => {//箭头函数没有this指针(没有自己的执行上下文,用的是父级的执行上下文),this指针是指执行父级对象的执行上下文环境。所以这里的this指向的也是window console.log(this) } } obj.fun() |
二、在对象上调用(指向的是当前对象)
因为是在obj对象上调用的该函数;所以this指向的是obj对象
1 2 3 4 5 6 7 |
var obj = { name:666, fn:function(){ console.log(this) } } obj.fn() |
三、在构造函数上调用(指向的是实例)
在创建实例的时候就相当于调用了构造函数,所以就相当于是当前实例调用了构造方法,所以this的指针指向的是这个实例
1 2 3 4 5 |
function Person(name){ this.name = name; console.log(this.name); } var preson = new Person(666); |
四、使用apply、call、bind改变this指针的时候(指向要指向的对象)
下例因为强制改变了this的指针,所以指针就指向window对象
1 2 3 4 5 6 7 |
var obj = { name:666, fn:function(){ console.log(this) } } obj.fn.call(window) |