美文网首页
this重新理解

this重新理解

作者: zchub | 来源:发表于2019-01-23 09:02 被阅读0次
var a = {
  b: 1,
  c: ()=>{
    console.log(this)
  }
}
console.log(a.c())      // window
function b(){
  this.c = 1;
  this.d = ()=>{
    console.log(this)
  }
  return this;
}
console.log(b().d())    // window

var e = new b();
console.log(e.d());      // {c: 1, d: ƒ}

this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

经典代码

function foo() { 
  var a = 2;
  this.bar(); 
}

function bar() { 
  console.log( this.a );
}

foo(); // ReferenceError: a is not defined

this 是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调 用时的各种条件。this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包 含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this 就是记录的 其中一个属性,会在函数执行的过程中用到。

优先级判断

  1. 由new调用?绑定到新创建的对象。
  2. 由call或者apply(或者bind)调用?绑定到指定的对象。
  3. 由上下文对象调用?绑定到那个上下文对象。
  4. 默认:在严格模式下绑定到undefined,否则绑定到全局对象。

而对于箭头函数 =>

ES6 中的箭头函数并不会使用四条标准的绑定规则,而是根据当前的词法作用域来决定 this,具体来说,箭头函数会继承外层函数调用的 this 绑定(无论 this 绑定到什么)。这 其实和 ES6 之前代码中的 self = this 机制一样。

相关文章

  • 《重新理解创业》——重新理解失败

    村上春树《挪威的森林》:死不是生之对立,而是作为生的一部分永存。 第一章:重新理解战略 战略是由问题驱动去解决真实...

  • this重新理解

    this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。 经典代码 this 是在运行时...

  • 重新理解财富

    凡是与财富有关的知识,都会激起人们的兴趣,哪怕仅仅听到“财富”二字,也会自然吸引你的注意力。因为,财富、权利...

  • 重新理解:担当

    这次姑父住院,从广药到中山医,再从中山医普内科到了ICU。 记得姑父第一次进ICU是胃癌术后,也是因为...

  • #重新理解听说

    日常沟通时,都是习惯性的根据感觉去理解他人所说的话,根据感觉去应对他人说的话,然后很自然的做对应的回应。但如果能慢...

  • 重新理解 “休息”

    今天想讨论一个看似无关紧要的问题:休息的目的是什么?休息效果最好的方式是什么? 我之前没想过这个问题,谁不懂休息啊...

  • 重新理解“付费”

    第一次听说付费就是捡便宜这个道理的时候简直就是磕到自己的下巴。在这之后很长的一段时间里。 凡是能用钱买的其实都是便...

  • 重新理解贵人

    遇见贵人的原则 上周温习了笑来老师得到专栏关于如何遇到贵人一章,感慨良多,先摘录下体总结的遇到贵人的原则: 1.乐...

  • 重新理解设计

    未来一定是美的战胜丑陋的,先进的战胜落后的,简洁的战胜复杂的。设计不仅是产品的包装、不仅是产品的灵魂,而且还是产品...

  • 重新理解借钱

    我们每个人都遇到过朋友问自己借钱的事,而自己又不想借。不借麻怕伤害感情,借麻自己又怕他不还,还影响了自己的心情。 ...

网友评论

      本文标题:this重新理解

      本文链接:https://www.haomeiwen.com/subject/cybkjqtx.html