彻底弄懂js中的this指向,js中this的指向有几种情况

  彻底弄懂js中的this指向,js中this的指向有几种情况

  你能理解JavaScript的这个指向问题吗?下面这篇文章带你谈谈这个麻烦的这个指点问题,希望能帮到你!

  

this的指向

  在我们看到的介绍如何判断这一点的各种指向方法中,"this的最终指向的是那个调用它的对象"这一句被视为核心,但我们在面对各种情况时却很容易混淆。鉴于各种情况和我的理解,我提出一句“箭头,定时和构造,特殊情况特殊看,普通调用看点号,后面有点不看前,然后就近原则判,最后剩下就是window”。【相关推荐:javascript学习教程】

  箭头函数

  箭头本身没有这个,所以没有这个变化。它捕捉到了这一点在外层的应用。

  var name= windowsName

  var a={

  名字:“樱桃”,

  fn() {

  setTimeout(()={

  console . log(this . name);

  },0)

  }

  }

  A.fn() //Cherry解析:首先fn函数被对象A调用,所以fn函数的this指向对象A,然后箭头在外层捕捉到this,所以在setTimeout中不是this,而是fn函数的this,所以最终得到对象A中的名称。

  定时器

  这对于delay函数内部的回调函数指向全局对象窗口。

  var name= windowsName

  var a={

  名字:“樱桃”,

  fn() {

  setTimeout(function (){

  console . log(this . name);

  },0)

  }

  }

  A.fn() //windowsName解析:首先对象A调用fn函数,然后这里的setTimeout中的回调函数是匿名函数,这是一个常用函数,所以匿名函数中的这个指向window。

  var name= windowsName

  var b={

  名称:“setTimeoutName”

  }

  var a={

  名字:“樱桃”,

  fn() {

  setTimeout((function (){

  console . log(this . name);

  }).绑定(b),0)

  }

  }

  A.fn() //setTimeoutName分析:首先对象A调用fn函数,然后setTimeout中的回调函数是匿名函数,是常用函数。然后这个匿名函数指向window,但是用bind把这个匿名函数改为object B,所以最后这个名字在object B中。

  构造函数

  这在构造函数中指向创建的实例对象,

  注意:如果构造函数中返回一个对象,创建时不会有新的实例对象,而是这个返回的对象

  函数fn(){

  this.age=37

  }

  var a=new fn();

  console . log(a . age);//37

  a .年龄=38;

  console . log(fn);//{ this . age=37;}

  console . log(a . age);//38解析:这里我们通过构造函数创建实例对象A,相当于开辟了一个新的地方来复制构造函数的内容,然后就有了对象A,这个时候这就指向了对象A,我们在不影响构造函数的情况下修改了对象A的内容。

  点号判断

  判断这个方向。并遵循就近原则。

  var a={

  年龄:10岁,

  乙:{

  年龄:12岁,

  fn(){

  console . log(this . age);

  }

  }

  }

  a . b . fn();//12解析:对象A调用对象B的fn函数,有两个。在fn函数之前,所以最近的是对象B,所以fn函数的this指向对象B,最后得到对象B的年龄。

  var a={

  年龄:10岁,

  乙:{

  年龄:12岁,

  fn(){

  console . log(this . age);//未定义

  }

  }

  }

  var c={

  年龄:20,

  }

  变量d={

  年龄:30,

  }

  绑定(c)。bind(d)();//20解析:对象A调用对象B的fn函数然后用bind改变这个的方向。此时fn已有前后。而不是看着前方。只要看后面,然后最近的bind把this的方向改成C,那么fn函数的this指向对象C,得到对象C的年龄。

  练习

  函数outerFunc() {

  console.log(this) //{ x: 1 }

  函数func() {

  console.log(this) //窗口

  }

  函数()

  }

  outerFunc.bind({ x: 1 })()obj={

  func() {

  const arrowFunc=()={

  console.log(这个。_name)

  }

  返回箭头Func

  },

  _name: obj ,

  }

  obj.func()() //obj

  func=obj.func

  func()()//未定义

  obj . func . bind({ _ name: new obj })()()//new obj

  obj . func . bind()()()//未定义

  obj . func . bind({ _ name: bind obj })。apply({ _ name: apply obj })()//bind obj

apply、call、bind

  使用apply、call、bind函数来更改this的方向,这在上面的this示例中使用。

  区别

  thisArg,[ argsArray]调用(thisArg,arg1,arg2,)

  apply和call函数的区别在于在这之后传入的参数,apply传入的是数组,call传入的是扩展的参数。

  bind(thisArg[,arg1[,arg2[,]]])()

  然后bind函数创建一个新函数,需要手动调用。这被指定为bind()的第一个参数,其余参数将作为新函数的参数,调用时使用如有错误,请大家指正!!感谢大家阅读!

  【相关视频教程推荐:web前端】以上是你能理解JS的这个指向的问题?看看这篇文章的详细内容,请关注我们的其他相关文章了解更多!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: