龙空技术网

Javascript中的this

灿烂的星海游戏开发 209

前言:

此刻姐妹们对“js如何获取this”大概比较珍视,咱们都需要学习一些“js如何获取this”的相关内容。那么小编也在网上汇集了一些对于“js如何获取this””的相关文章,希望咱们能喜欢,兄弟们一起来学习一下吧!

  很多同学并不清楚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);

标签: #js如何获取this