快捷搜索: 王者荣耀 脱发

javascript 中 this 的含义

javascript 编程中,经常使用 this ,那么 this 到底代表哪个对象呢?

首先我们看看 this 使用的意义,使用 this 可以传递上下文对象,避免在定义中将参数实际名称写入,更可以避免在传递过程中造成混乱,所有使用 this 是非常有效的方法。

那么还是让我们看看,this 到底代表哪个对象吧。分以下四种情况:

1、默认状态代表 window对象,如:

function test() {
    console.log(this.val);
}
var val=10;
fn();

输出结果:10

显然使用了全局变量,所有 this 代表的对象为 window

2、通过一个对象调用该函数,则 this 代表最后调用它的对象,如:

function test() {
    console.log(this.val);
}
var testobj = {
    val:10;
    fun:test;
}
testobj.fun();

输出结果:10

this 此时代表 testobj 对象,这是引用该函数的对象。

再如

function test() {
    console.log(this.val);
}
var testobj = {
    val:10;
    obj:otherobj;
}
var otherobj = {
    val:20;
    fun:test;
}
testobj.obj.fun();

输出结果:20

因为 otherobj 是最后调用函数的对象,所以 this 代表 otherobj。

这里需要注意的一点是,如果使用变量将函数传递给变量,则上下文对象无效,如

function test () {
    console.log(this.val);
}
var val=5;
var testobj = {
    val:10;
    fun:test;
}
var varfun=testobj.fun;
varfun();

输出结果:5

由于定义了变量 varfun = testobj.fun 将函数传递给了变量,testobj 就不再是上下文对象了,this 则代表window对象

所以使用的是全局变量。

3、使用bind()、apply()、call()调用时,this代表传入的第一个参数

function test() {
    console.log(this.val);
}
var testobj = {
    val:10;
}
test.call(testobj);

输出结果:10

如果传入的第一个参数为 null ,则 this 依然代表 window 对象。

function test() {
    console.log(this.val);
}
var testobj = {
    val:10;
}
var val:20;
test.call(null);

输出结果:20

4、如果函数是一个构造函数,用new创建对象时,this则代表新创建的对象

function test(val) {
    this.val=val;
}
var varfun=new test(5);
console.log(varfun.val);

输出结果:5

经验分享 程序员 微信小程序 职场和发展