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
原文地址:https://www.cnblogs.com/linziwei/p/7661646.html