美文网首页
3个点让你彻底搞懂this

3个点让你彻底搞懂this

作者: 游戏程序猿 | 来源:发表于2019-08-05 15:50 被阅读0次

    很多同学搞不清楚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 是同一个函数对象么?有兴趣的同学自己验证一下。^_^

    这里有个学习交流群 可以一起来讨论一下哦 

    cocos creator学习交流群

    相关文章

      网友评论

          本文标题:3个点让你彻底搞懂this

          本文链接:https://www.haomeiwen.com/subject/rmpmdctx.html