JavaScript中this的指向

  对于this在不同场景的指向,往往搞不清楚到底指向谁。在函数定义的时候确定不了它的指向,只有函数执行的时候才能确定this到底指向谁,实际上只需要记住一点:this始终指向调用它的对象

1. 普通函数运行时,全局调用则this指向window
function foo() {
	var a = 1;
	console.log(this.a);
}
var a = 2;
foo(); // 2

  按照this最终指向的是调用它的对象,这里的函数foo的调用属于全局调用,因此this指向window。

function foo() {
	var a = 1;
    console.log(this.a);
}
    var a = 2;
    window.foo(); // 2
2. 函数被调用时是被对象调用,则this指向调用它的对象
var obj1 = {
	fn: function(){
    	console.log(this.bar);
    	},
    	bar : 1
}
bar = 2;
obj.fn(); // 1
var obj2 = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); 
        }
    }
}
obj2.b.fn(); // 12

  这里对象中的方法中的this,指向调用它的对象,即 b ,所以输出结果是b对象中的a的值;

3.作为构造函数调用时,this指向实例对象
function foo(name,age){
    this.name = name;
    this.age = age;
}
var ab = new foo('QG',18);
console.log(ab.name); // QG

  这里的方法作为构造函数调用,ab是被new出来的实例对象,所以这里this指向实例对象ab。

4.apply和call中的this指向参数中的对象
var a = 10;
var foo = {
    a: 20,
    fn: function(){
        console.log(this.a);
    }
};
var bar ={
    a: 30
}
foo.fn.apply();//10(若参数为空,默认指向全局对象)
foo.fn.apply(foo);//20
foo.fn.call(bar);//30
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plustard1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值