JavaScript中this的用法

this的使用环境有以下几种

1、全局性函数调用

  我们通常在全局内声明和调用的函数都叫全局函数。在全局函数中,this等于window。

例如下面一段代码中,运行结果应该是0。因为this调用的是全局变量,等同于window。

var x = 1;

function test() {
    this.x = 0;
    console.log(this.x); //0
}
test();

2、作为对象方法的调用

所谓对象方法,指的是对象中值为函数的属性。当函数不是全局调用,而是作为某个对象的方法调用时,this等于那个对象。

例如下面这段代码,func是作为对象o的方法,所以func的调用中this指向对象o。

var x = 1;

function test() {
    console.log(this.x);
}
var o = {};
o.x = 0;
o.func = test;
o.func(); //0

3、作为匿名函数被返回的时候

匿名函数的执行环境具有全局性,因此其this对象通常指向window。

例如下面这段代码,由于getNameFunc返回的是一个匿名函数,所以返回函数的this指向window。

var name = "The Window";
var object = {
    name: "My Object",
    getNameFunc: function() {
        return function() {
            return this.name;
        }
    }
};
console.log(object.getNameFunc()()); //"The Window"

4、作为构造函数的调用

所谓构造函数,就是通过对这个函数使用new操作符来生成一个新对象,而this就是指这个新对象。

例如下面这段代码,由于func是使用new操作符来构造的一个对象,所以this指func这个对象。

var x=1;
function func(){
    this.x=2;
}
var func=new func();
console.log(func.x);//2
console.log(x);//1

5、使用apply调用函数的时候

使用function.apply(obj,args)调用函数的时候,可以接受两个参数obj和args,其中obj用来代替function类里的this对象,所以此时函数内的this指的是apply的第一个参数。

例如下面这段代码,如果apply没有参数,则默认调用全局对象,因此这时的运行结果为1,证明this指的是全局对象。如果apply有参数,则this指向的是第一个参数所指的对像。

var x = 1;

function test() {
    console.log(this.x);
}
var o = {};
o.x = 2;
o.func = test;
o.func.apply();  //1
o.func.apply(o); //2

随着函数使用场合的不同,this的值会发生变化,但是有一个总的原则,那就是this指的是调用函数的那个对象。

原文地址:https://www.cnblogs.com/meng9688/p/6815259.html