3个点让你彻底搞懂this

发布时间 2024-01-04 09:48:56作者: rain4414

很多同学搞不清楚js里面的this 到底是谁?搞不清楚this到底如何使用呢?,今天给大家总结了this的用法。

 

1: this机制

  Js 进入函数里面可以访问一个特殊的”参数”叫做this。和很多高级语言(java, c#, c++)this是不一样的,jsthis 是你传什么,就是什么,其它高级语言的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); 进入到functionthis 指的是强制绑定的”hello”, 强制绑定具备有最高的优先级,有强制绑定,this以强制绑定的为主,强制绑定 >= 显示/隐式。强制绑定有一个被90%的人忽略的事实,那就是:

   var a = function() {… …};

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

请问, ab 是同一个函数对象么?有兴趣的同学自己验证一下。^_^