• this


    this有四种情况!
    1)当在函数调用的时候指向widow
    2)当方法调用的时候指向调用对象
    3)当用apply和call上下文调用的时候指向传入的第一个参数
    4)构造函数调用指向实例对象
     
     
    函数里的this可以分为两种来记忆:
    如果是使用new方式创建对象,this指向新建的那个对象;
    如果只是普通的调用,谁调用这个函数,函数里的this就指向谁~
     
    this一般有几种调用场景
    var obj = {a: 1, b: function(){console.log(this);}}
    1、作为对象调用时,指向该对象 obj.b(); // 指向obj
    2、作为函数调用, var b = obj.b; b(); // 指向全局window
    3、作为构造函数调用 var b = new Fun(); // this指向当前实例对象
    4、作为call与apply调用 obj.b.apply(object, []); // this指向当前的object
     
    阮一峰的文章: http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
     
    var obj1 = {
      a: [1,2,3],
      walk: function() {
        var me = this;
        return function() {
          console.log(this.a) // undefined
          console.log(me.a) // [1,2,3]
        }
      }
    }
     
    var obj2 = {
      a: [1,2,3],
      walk: function() {
        return () => console.log(this.a) // [1,2,3]
      }
    }
     
     
    箭头函数中的this
     

    (1)一般函数this指向在执行是绑定  当运行obj.say()时候,this指向的是obj这个对象。

    var x=11;
    var obj={
     x:22,
     say:function(){
     console.log(this.x)
     }
    }
    obj.say();
    //console.log输出的是22

    (2)所谓的定义时候绑定,就是this是继承自父执行上下文!!中的this,比如这里的箭头函数中的this.x,箭头函数本身与say平级以key:value的形式,也就是箭头函数本身所在的对象为obj,而obj的父执行上下文就是window,因此这里的this.x实际上表示的是window.x,因此输出的是11。

    var x=11;
    var obj={
     x:22,
     say:()=>{
     console.log(this.x);
     }
    }
    obj.say();
    //输出的值为11
  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces 718C && HDU 3572 && Constellation
    CodeForces
    USACO 5.4 tour的dp解法
    10.22~10.28一周经典题目整理(meeting,BZOJ4377,POJ3659)
    codeforces 724D
    codeforces 724C
    hdu5909 Tree Cutting
    hdu5822 color
  • 原文地址:https://www.cnblogs.com/linziwei/p/7661646.html
Copyright © 2020-2023  润新知