71爱课网 >  java培训学校 Javascript中的this(this_js)

Javascript中的this(this_js)

  • 授课方式: 面授/网课
  • 授课学校:java培训学校
  • 预约人数:1148人试听过
  • 教学点: 0个
  • 上课时段: 全日制
  • 开课时间:随到随学
  • 微信客服: 扫码咨询
  • 咨询电话: 15907412407

  很多同学并不清楚javascript里面的this到底是什么,或者理解的不是特别清楚。今天给大家总结一下this的用法。

  this机制

  Javascript的函数里面可以访问一个特殊的“参数”叫做this。但这个this,和很多高级语言(java, c#, c++)的this是有区别的。Javascript的this,更像是一个额外的参数,这个类似于额外的参数,更像是函数的第一个参数。是你传什么,就是什么。但其它高级语言的this,是当前类的实例。

  this使用原则

  根据上面,可以得到了一个结论,就是可以在函数里面使用this,但前提是你要知道这个this是哪个对象。如果不清楚,就一定要搞清楚,切不可乱用。

  如何搞清楚this是谁?

  函数里面使用的this,是在此函数调用的时候传递的。调用此函数的时候传递this有以下三种方式:

  1. 显示传递

  Function a(arg1, arg2) { ... ... }

  a.call("函数this对象", arg1, arg2)

  进入a函数后,使用this,那么this就是外面传递的对象,例如:

  a.call("hello", arg1, arg2);

  进入a函数后,此处的this指的是"hello"这个字符串对象。

  a.call({uname: "hello"}, arg1, arg2);

  进入a函数后,此处的this指的是{uname: "hello"}对象实例。

  2. 隐式传递this

  假设现在有一个表对象名为obj,其中有一个成员为func,这个成员func可以是函数对象。当我们使用obj.func的方式,可以访问到这个成员函数。而当我们以obj.func(arg1, arg2)进行成员函数调用的时候,此时的func函数内部的this对象就是外面的obj对象。这个也是最常用的成员函数调用方式之一。

  3. 强制绑定this与强制绑定的陷阱

  强制绑定是对一个函数的this进行强制指定,这样当函数被调用时,函数内部访问到的this对象为预先指定的绑定对象。例如:

  var a = function(arg1, arg2) {}.bind("hello");

  这样当进入到a函数时,this对象则为"hello"。强制绑定具有最高的优先级,即若有强制绑定的this对象,则显示和隐式指定的this不起效。

  另外看如下代码:

  var a = function() { };

  var b = a.bind(“对象”);

  那么此处的a和b是不是同一个函数对象呢?可以写代码验证一下。

  this的绑定的用途

  有一种比较常见的方式,就是把一个对象的成员函数转换成一个普通函数,这时候bind就派上用场了。例如现有一个实体对象entity,其中有一个成员函数update。如果我们需要在定时器中每隔100ms来调用这个函数,那么可以按如下方式实现:

  setTimeout(entity.update.bind(entity), 100);

推荐课程

师资力量