zoukankan      html  css  js  c++  java
  • 认识javascript中的this

    在javascript中this是一个神奇的东西,它在不同的使用情况下会有不同表现,相信对this没有详细了解的同学用着用着就开始放迷糊了。

    今天我们讨论在不同执行环境中this的作用。

    1. 在方法中,this 表示该方法所属的对象。

    function A() {
        console.log(this);
    }
    
    A(); //Window
    
    let obj = {};
    obj.A = A;
    obj.A(); //obj

    同样是执行A方法,第一次执行时候打印了Window,是因为A在window的环境下运行,所以打印了Window。

    第二次,我们将A方法挂载到了对象obj上,然后执行obj的A方法,此时A方法在obj的环境下运行,所以打印了obj。

    由此,我们可以总结一个结论:方法中的this指向方法所属的对象。

    2.  在单独使用中,this表示全局对象Window。

    console.log(this); //Window

    3. 在函数中,this 表示全局对象。

    function A() {
        console.log(this);
    }
    
    A(); //Window

    4. 在函数中,在严格模式下,this 是未定义的(undefined)。

    console.log(this); //undefined

    5. 在事件中,this表示接受监听事件的元素。

    document.addEventListener("click", function() {
        console.log(this); //document
    })

    6. 在箭头函数中,this表示箭头函数外层函数(最近一层函数)的this。通俗来说,箭头函数不改变this指向。

    document.addEventListener("click", function() {
        console.log(this); //document
        let o = {};
        o.A = () => {
            console.log(this);
        }
    
        o.A(); //document
    });

    这里我们需要注意,o.A()打印的是document,是因为我们A是箭头函数,箭头函数的this表示它外层执行环境中的this,也就是 事件监听中的this。

    7. call、apply、bind这三个方法可以改变函数的this指向。

    function A() {
        console.log(this);
    }
    
    let obj = {};
    
    A.call(obj); // obj
    A.bind(obj)(); // obj
    A.apply(obj); //obj

    以上就是this的各种规则,清楚的了解他们之后,相信以后开发中就不会因为this而犯迷糊了。

    浅陋见识,不足之处,请大神指正。

  • 相关阅读:
    P3383 【模板】线性筛素数
    【模板】矩阵乘法快速幂
    【模板】线性筛素数
    【模板】快速幂
    【模板】归并排序求逆序对
    【模板】归并排序模板
    luogu 1084 疫情控制
    luogu 3155 [CQOI2009]叶子的染色
    luogu 1453 城市环路
    luogu 2607 [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/heshuaiblog/p/13996163.html
Copyright © 2011-2022 走看看