前言:
此刻姐妹们对“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