this
是JavaScript中的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如:
function a(){
this.x = 1;
}
随着函数使用场合的不同,this
的值会发生变化,所以要分析this
所在的函数是当做哪个对象的方法调用的,则该对象就是this
所引用的对象。
this
的使用一般有以下四种情况:
普通函数调用
普通函数调用属于全局性调用,this
就代表了全局变量。
比如:
const x = 1;
function a(){
console.log(this.x);
}
a(); // 输出为1
此时的this指的就是全局变量global,最后一句其实就等价于
window.a();//输出为1
对象的方法调用
在 JavaScript 中,函数也是对象,因此函数可以作为一个对象的属性,此时该函数被称为该对象的方法,在使用这种调用方式时,this 被自然绑定到该对象。
const a = {
x : 1,
y : function(x) {
console.log(this.x);
}
};
a.y(0); // 输出1,this绑定到当前对象,即a对象
在这段代码中,function(x){}
这个函数就是a对象的一个方法,所以此时的this
就是a
对象。
构造函数调用
JavaScript 支持面向对象式编程,与主流的面向对象式编程语言不同,JavaScript 并没有类的概念,而是使用原型继承方式。相应的,JavaScript 中的构造函数也很特殊,如果不使用 new 调用,则和普通函数一样。一般构造函数以大写字母开头,如果调用正确,this
绑定到新创建的对象上。
function a(){
this.x = 1;
}
const b = new a();
console.log(b.x); //输出1
apply调用
apply()
是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。所以this指的就是这第一个参数。
const x = 0;
const a = {
x : 1,
y : function() {
console.log(this.x);
}
};
a.y.apply(); // 输出0
apply()
的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
若将给apply()
传入参数,即
a.y.apply(a); // 输出1
则表明此时的this
指的是对象a
。