this关键字的作用范围

一个function, 从语法的角度讲,既可以使用括号让其执行,也可以new它,比如

fucntion a(){}

var b = a();

var c = new a();

对 于c来说,a方法同样会执行,需要注意的是,如果a方法有return语句,那么b和c的值都是这个被return的东西;如果a方法根本没有任何 reutrn,那么b的值是undefined,对于c来说,a方法等同于最后会被默认加上一个retrun this,所以c会拿到一个对象。

 

再看另一个方法,

function a() {
    console.log(this);
    this.prototype.test = function(){
        console.log(this);
    }
    this.id=1;
}

如果直接用a()来运行它,等价于window.a();所以打印出来的this就是window,this.id也会给window添加一个id属性并赋值;prototype的那三行会给window对象添加一个叫做test的方法。

 

如果用var b = new a()来运行它,new会产生一个新的this,所以打印出来的就是一个空的a对象;

b.test()会让test方法执行,打印的是一个带有test方法的a对象。

 

---------------------------------------------------------

需要额外注意的是,JS在需要定义callback方法的时候,callback方法默认的执行域是window,所以callback中的this就是window。如果还想使用callback定义的时候的作用于,就要用一个变量来寄存当时的this,比如:

function a() {
    this.test = function(){
        var me = this;
        setTimeout(function(){
            console.log(me);
        },1000);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值