es5中 this 的指向

var factory = function(){
this.a = 'a';
this.b = 'b';
this.c = {
a:'a+',
b:function(){return this.a}
}
};
console.log(new factory().c.b()); // a+

通过es5的语法调用,返回的是 a+ ,this 的指向是该函数被调用的对象,也就是说函数被调用的时候,这个 this 指向的是谁,哪个对象调用的这个函数,这个 this 就是谁。

es6中 箭头函数 this 的指向

var factory = function(){
this.a = 'a';
this.b = 'b';
this.c = {
a:'a+',
b:() => {return this.a}
}
};
console.log(new factory().c.b()); // a

箭头函数函数体中 this 的指向是定义时 this 的指向。在定义 b 函数时,b当中的 this 指向的是 这个factory 函数体中的 this ,这个 factory 函数体中的 this 指向的是这个构造函数的实例,这个实例当中的 a 就等于 ‘a’;虽然是调用的b对象,但这个b对象指向的是这个实例。

箭头函数的this指向:箭头函数在定义时执行器上下文的this的指向(不具有块级作用域),即会取当前的函数的作用域链上的this,忽略块级作用域中的this

1.

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

一般的定义函数跟我们的理解是一样的,运行的时候决定this的指向,我们可以知道当运行obj.say()时候,this指向的是obj这个对象。

2.

var x=11;
var obj={
x:22,
say:()=>{
console.log(this.x);
}
}
obj.say();//

es6箭头函数中的this是定义时绑定的,就是this是继承自父执行上下文!!中的this,比如这里的箭头函数中的this.x,箭头函数本身与say平级以key:value的形式,也就是箭头函数本身所在的对象为obj,而obj的父执行上下文就是window,因此这里的this.x实际上表示的是window.x,因此输出的是11。(this只有在函数被调用,或者通过构造函数new Object()的形式才会有this)

3.

var a=11
function test1(){
this.a=22;
let b=function(){
console.log(this.a);
};
b();
}
var x=new test1();//
var a=11
function test1(){
this.a=22;
let b=function(){
console.log(this.a);
};
b();
}
test1();//

箭头函数情况下:

var a=11;
function test2(){
this.a=22;
let b=()=>{console.log(this.a)}
b();
}
var x=new test2();//

ES6中定义的时候绑定this的具体含义,应该继承的是父执行上下文里面的this,切忌是父执行上下文!!!

简单对象(非函数)是没有执行上下文的!

箭头函数中,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

最新文章

  1. MySQL中DATETIME、DATE和TIMESTAMP类型的区别
  2. em 和 px相互转换
  3. C语言之Sleep函数
  4. SpringMVC学习--功能完善
  5. 【CentOS 6.5】 U盘安装以及桌面空白问题
  6. UIView frame, bounds and center
  7. SignalR实现B/S系统对windows服务运行状态的监测
  8. 89c52串口发送接收小示例
  9. session锁问题
  10. vue.js随笔记---初识Vue.js
  11. SAP的 消息 弹出窗口(备忘)
  12. js 继承的简单易懂小例子
  13. 八.利用springAMQP实现异步消息队列的日志管理
  14. hive mysql元数据,报错 Specified key was too long; max key length is 767 bytes
  15. scikit-learn入门导航
  16. 解决VMware虚拟机网络时长中断的问题
  17. Zookeeper(三)-- JAVA原生API
  18. 8VC Venture Cup 2016 - Elimination Round E. Simple Skewness 暴力+二分
  19. ASP.NET中26种性能优化方法
  20. [转载]Python注册表信息丢失的解决方案

热门文章

  1. [Go] golang缓冲通道实现资源池
  2. Oracle day01 select where关键字
  3. C#设计模式之二十一访问者模式(Visitor Pattern)【行为型】
  4. webstorm里用 DB browser 连接 mysql SQlite Oracle数据库
  5. python 的with用途(清理资源和异常处理,同时代码精简)
  6. ARM汇编指令集_学习笔记(1)
  7. GIT的使用(Gitlab上传本地仓库代码,Webstorm修改更新)
  8. 【English】二、It作为代词,可以代指什么
  9. MongoDB副本集功能及节点属性梳理
  10. Pycharm使用技巧(转载)