Python|Javascript中的this

Python|Javascript中的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来调用这个函数 , 那么可以按如下方式实现:
【Python|Javascript中的this】setTimeout(entity.update.bind(entity) 100);