码迷,mamicode.com
首页 > Web开发 > 详细

js中this的指向

时间:2020-01-03 19:09:40      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:size   time   rip   复杂   cti   use   spl   绑定   箭头   

JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变

 

严格模式(‘use strict‘

  1.非严格模式下,全局作用域下的this指向window

  2.严格模式下,全局作用域下的this指向undefined

    use strict
    function X() {
        console.log(this);
    }
    X(); // 严格模式输出undefined,非严格模式输出Window

 

非严格模式讨论

  1.在对象方调用方式中, this指向调用它所在方法的对象

    var X = {
        A: XA,
        B: function() {
            console.log(this.A);
        }
    };
    X.B();//输出XA

  2.在嵌套对象调用方式中,this指向最终调用对象

    var A = A;
    var X = {
        A: XA,
        B: function() {
            console.log(this.A);
        }
    };
    var B = X.B;
    B();//输出‘A‘

  3.构造函数中this指向由return返回值确定(普通返回值指向对象实例本身,复杂对象返回值指向新对象)

    function X() {
      this.A = XA;
      return ‘‘;//当前情况结果输出XA
      //return {A:‘RA‘};//当前情况结果输出RA
    }
    var Y = new X();
    console.log(Y.A)

  4.在HTML事件句柄中,this指向了接收事件的HTML元素

<button onclick="this.style.display=‘none‘">点击消失</button>

  5.apply、call、bind绑定时,this指向第一个参数

    var A = {a:Aa};
    var B = {a:Ba};
    function X() {
        console.log(this.a);
    }
    X.call(A,B); // 输出Aa

  6.箭头函数的this指向为定义箭头函数的this(等同于上一级this)

    var A = A;
    var X = {
      A: XA,
      //Y: () => {console.log(this.A)}//该情况输出A
      Y: function() {console.log(this.A)}//该情况输出XA
    }
    X.Y(); 

  7.定时器(setTimeout、setInterval)调用 在定时器中,this指向window

    var A = A;
    var X = {
      A: XA,
      Y: setTimeout(function() {console.log(this.A)}, 1000)
    }
    X.Y; //输出A

js中this的指向

标签:size   time   rip   复杂   cti   use   spl   绑定   箭头   

原文地址:https://www.cnblogs.com/zhaozhou/p/12146243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!