JavaScript this指向

this在什么情况下指向window?

1. 纯粹的函数调用

  • 函数常用发,属于全局性调用。因此函数内的this指向window。请看下面这段代码,它的运行结果是1
var num = 1;
function fun(){
	console.log(this.num)
}
fun() // 1

this在什么情况下指向调用者?

1. 对象方法的调用

  • 函数可以作为某个对象的方法调用,这时候的this指向上级对象
function test(){
	console.log(this)
}
var obj = {
	x:666;
	fn:test
}
obj.fn // {x:666,fn:f test()}

2. 构造函数的调用

  • 所谓的构造函数,就是通过这个函数,通过new的生成一个新对象,这时候的this指向新对象
function Test(){
	this.x = 999;
}

var obj = new Test()
obj.x // 99
  • 运行结果为99。为了表明这时候的this不是全局,请看下面案例。
var x = 2;
function Test(){
	this.x=777;
}

var obj = new Test()
console.log(x) // 2
console.log(obj.x) // 777
  • 运行结果全局定义的x2,并没有被objnew出来的Test对象修改的x值改变。也就是说objnew出来的Test指向的是上级对象,并非指向window

通过 apply(),call() 调用改变this指向

  • 这里是通过apply去改变this指向。call的方式也是类似。不同点的是apply只能有两个参数,apply(this,[]),而call可以有多个参数call(this,1,2,3,4,5)
var x = 0;
function test(){
    console.log(this.x)
}
var obj = {
    x:1,
    fn:test
}
obj.fn.apply() // 0
  • apply()有2个参数,当参数为空时,默认调用全局对象。因此这时候的运行结果为0。这时候的this指向全局
  • 通过改变apply的参数修改this指向,把最后一行代码修改为下面的
obj.fn.apply(obj) //1

运行结果变成1,说明这时候的this指向上一级obj对象

关于apply,call可以查看下篇文章

apply,call的使用与理解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码の搬运工

记录学习,记录认知,记录。

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

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

打赏作者

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

抵扣说明:

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

余额充值