zoukankan      html  css  js  c++  java
  • js中this指向

    参考文献: https://juejin.im/entry/5a20d18af265da43062a9031

    5大规则

    (1) 如果 new 关键词出现在被调用函数的前面,那么JavaScript引擎会创建一个新的对象,被调用函数中的this指向的就是这个新创建的对象。

    function fn () {
        this.age = 10;
        console.log(this);
    }
    
    let a = new fn();   //fn {age:10}

    (2) 如果通过apply、call或者bind的方式触发函数,那么函数中的this指向传入函数的第一个参数。

    function hello () {
        console.log(this);
    }
    
    var obj = {
        value: 5
    }
    
    hello.call(obj);     // {value:5}
    hello.apply(obj);  // {value:5}
    hello.bind(obj)();   // {value:5}

    (3) 如果一个函数是某个对象的方法,并且对象使用句点符号触发函数,那么this指向的就是该函数作为"那个对象的属性"的对象,也就是,this指向句点左边的对象。

    var obj = {
        value: 5,
        printThis: function() {
          console.log(this);
        }
    };
    
    obj.printThis();   //{value:5, printThis:f}

    (4) 如果一个函数被传给一个变量后,调用,this指向全局对象,在浏览器中,即是window。

    var obj = {
        value: 5,
        printThis: function() {
          console.log(this);
        }
    };
    
    let sayThis = obj.printThis;
    sayThis();    // window {......}

    (5) 如果出现上面对条规则的累加情况,则优先级自1至4递减,this的指向按照优先级最高的规则判断。

    var obj1 = {
        value: 'hi',
        print: function() {
            console.log(this);
        },
    };
    
    new obj1.print();  //print {}
  • 相关阅读:
    洛谷P1261 服务器储存信息问题
    洛谷P2110 欢总喊楼记
    洛谷P2482 [SDOI2010]猪国杀
    洛谷P2756 飞行员配对方案问题
    洛谷P2763 试题库问题
    洛谷P2774 方格取数问题
    Huffman编码
    SA后缀数组
    KMP
    LCA
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/11375495.html
Copyright © 2011-2022 走看看