JavaScript中的this
this
是JavaScript语言中的一个关键字。
它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。
总的来说,this
就是函数运行时所在的环境对象。
函数不同的使用场景,this
指向也会有所不同。
以下是我学习到的几种不同场景下this
指向的不同
单纯的函数调用
var x = 1;
function show(){
console.log(this.x);
}
show(); // 1
因为show函数,是全局函数,show函数运行时,this
的环境对象是window,但是在严格模式下,this
是undefined。
作为对象方法的调用
function show() {
console.log(this.x);
}
var x = 1;
var obj = {};
obj.x = 2;
obj.m = show;
obj.m(); // 2
将show函数赋值给obj的m,show函数运行时,this
的环境对象是obj。
作为构造函数的调用
var x = 2;
function show() {
this.x = 1;
}
var obj = new show();
obj.x; // 1
x; // 2
所谓的构造函数,就是通过这个函数,生成一个新的对象。此时,this
指向的是新的对象。
x的运行结果为2,表面全局变量x
的值没有变。
call,apply等工具函数的调用
这些工具函数作用是改变函数的this
指向。它的第一个参数就是改变后的调用这个函数的对象。因此,这里的this
指的是第一个参数。
var x = 0;
function show() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.m = show;
obj.m.show.apply() // 0
apply()
的参数为空时,默认调用全局对象(window),因此最后一行代码的运行结果为0。
总结一句话,this
用于访问当前方法所属的对象。
本文的内容,学习自阮一峰的个人博客,智能社的blue老师的公开课视频。