this指向的问题

this指向的问题

注意:this的指向在函数定义的时候是无法确定的,必须在函数执行的时候才能确定,this 指向 的是调用它的对象

判断方法

  1. window是全局的对象,如果有一个全局函数,这个函数中有this,当这个函数执行的时候,this指向全局 对象 window,抓住对象这一点
  2. 一个函数中有this,但是this没有被上级函数调用,那么this指向window。
  3. 一个函数中有this,this被它的上级函数调用,那么this就指向它的上级函数。
  4. 如果一个函数中有this,这个函数中有多个对象,尽管这个对象是被最外层的函数调用,this也是指向它的上一级函数。
  5. 函数预编译的过程中,this指向window
  6. 闭包中指向window
  7. call/apply可以改变函数运行时的this指向
  8. obj.fun(); fun()里面的this指向obj

下面我们来看一段很综合的代码,下面的代码都是连着的,是一个整体

var name ="222";
var a=
{
name:"111",
say:function()
{
console.log(this.name);
}

var fun =a.say();

虽然say是a引用的,但是在将say赋值给fun的时并没有执行,所以最终指向的是window,所以打印this.name是222

fun()

这里才是函数执行

a.say()

这里this被调用所以指向上级函数a,所以打印this.name是111

var b={
name:"333",
say:function(fun)
{
fun();
}
}
b.say(a.say);

b.say执行的时候a.say进行定义并没有执行,所以虽然say是a引用的,但是没有被调用,this最终指向window,打印的结果是222

b.say=a.say;

这里是不是相当于这样:
var b={
name:“333”,
say:function()
{
function()
{
console.log(this.name);
}
}
}

b.say();

this始终指向它的上一级b,所以打印333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值