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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值