zoukankan      html  css  js  c++  java
  • this小记

    普通函数

    在箭头函数出现前js的this是不断变化的。

    下面给俩段代码:

    node.onclick=function(){
        console.log(this)
    }

    这里的this指的是node,因为es5的function里面的this是根据上下文定义的,这个调用这个function的对象是node。

    简单的说,随调用的谁this就是谁

    var aa = {};
    aa.say = function(){console.log(this)};
    aa.say(); //Object aa
    let haha = aa.say;
    haha(); //Window

    箭头函数

    箭头函数自己是没有this的,它的this取决于定义它的时候的上下文的this。

    bind

    bind可以让函数绑定this, 原理如下

    function fn() {}
    
    const a = {};
    const fn2 = fn.bind(a);
    
    // 等效于
    const fn2 = function(...args) {
        fn.call(a, ...args)
    }

    因此我们看到,多重bind实际上只有第一个bind有效,因为最终调用的时候是call(第一个bind的对象, ...args)

    bind对箭头函数无效。

    this的优先级

    首先,new 的方式优先级最高,接下来是 bind 这些函数,然后是 obj.foo() 这种调用方式,最后是 foo 这种调用方式,同时,箭头函数的 this 一旦被绑定,就不会再被任何方式所改变。

  • 相关阅读:
    欧拉定理证明&阶乘的逆元
    Tree POJ
    GCD
    java42
    java41
    java
    java40
    搭建两个网站的琐碎问题
    虚拟机从无到有,服务器从无到有的历程(在更)
    java39
  • 原文地址:https://www.cnblogs.com/amiezhang/p/7724642.html
Copyright © 2011-2022 走看看