3个点让你彻底搞懂this
很多同学搞不清楚js里面的this 到底是谁?搞不清楚this到底如何使用呢?,今天给大家总结了this的用法。
1: this机制
Js进入函数里面可以访问一个特殊的”参数”叫做this。和很多高级语言(java, c#, c++)的this是不一样的,js的this 是你传什么,就是什么,其它高级语言的this, 是当前类的实例, 但是js是不一样的, js 的this更像一个参数,你传什么,它就是什么。
2: this使用原则
由上面,得到一个原则, 可以在函数里面使用this, 但在使用之前必须要知道当前this是哪个对象, 如果不清楚,千万别使用。
3: 如何搞清楚this是谁?
在函数里面使用this, 是在函数调用的时候传递的, 调用函数的时候传递this有三种方式:
(1)显示的传递:
Function a (参数1, 参数2) {… …};
a.call(“函数this对象”, 参数1, 参数2), 进入a函数后,使用this, 那么this就是外面传递的对象, 例如a.call(“hello”,参数1, 参数2); 进入a函数后,this指的是“hello”这个字符串对象。a.call({uname: “blake”}, 参数1,参数2); 进入a函数后, this指的是{uname: “blake”}对象实例;
(2)隐式传递this:
先回忆一下表({key: value})访问数据成员, 表.成员名字,这个成员可以是函数对象,所以调用的时候, 表.函数成员名字(参数1, 参数2), 那么使用这种方式的时候, 进入函数对象里面, 在函数里面使用this 指的就是外面的这个表实例;
(3)强制绑定this与强制绑定的陷阱
强制绑定是对一个函数对象强制的绑定好this对象, 这样在函数里面使用this就是你绑定的对象,
例如var a = function(参数1, 参数2) {}.bind(“hello”);
a(参数1, 参数2); 进入到function后this 指的是强制绑定的”hello”, 强制绑定具备有最高的优先级,有强制绑定,this以强制绑定的为主,强制绑定>= 显示/隐式。强制绑定有一个被90%的人忽略的事实,那就是:
var a = function() {… …};
var b = a.bind(“对象”);
请问, a与b 是同一个函数对象么?有兴趣的同学自己验证一下。^_^
这里有个学习交流群 可以一起来讨论一下哦