es6箭头函数中this
普通函数:
$scope.$on('$stateChangeSuccess',function(){this.list = this.getList();});
箭头函数:
$scope.$on('$stateChangeSuccess',()=>{this.list = this.getList();});
上面的代码是在es6中class的constructor体中的语句。函数的作用是调用该模块中的getList函数,将函数的返回值赋值给class中的list值。从写法上来看两种不同的写法表达的意思是一样的。
但是由于他们中调用了this这个特别的对象,其执行结果有着很大的不同:
普通函数:报错(找不到getList方法)
箭头函数:执行正常。
查找原因:箭头函数和普通函数之间有一个重要的差别:箭头函数没有自己的this值,其this值是继承外域的this值。
分析:函数function的本质也是一个对象。类似js中的Array,object,Function也是一个内部对象。js对运行function的时候也是将其当做一个对象来处理。
如果对面向对象稍有了解的话,我们知道对象中的this是用来获取对象本身的属性或者方法的。在上面的例子中,普通函数体里的this对象取值是function里的属性或者方法,由于普通函数里并未定义getList方法,所以其会报错undefined。
而在箭头函数中,由于其自身没有this属性,所以函数体里面的this均是从外域获取的属性或者方法,因此是正确的。
所以箭头函数不仅仅是从外观上简化了函数的写法,更解决了普通函数中this的hack问题。
http://www.cnblogs.com/yuzhongwusan/archive/2012/04/09/2438569.html 可以访问该篇博客了解function的详细
es6箭头函数中this的更多相关文章
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- 深入理解ES6箭头函数中的this
简要介绍:箭头函数中的this,指向与一般function定义的函数不同,比较容易绕晕,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. 1.何为定义时 ...
- es6箭头函数 this 指向问题
es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){ ...
- ES6之箭头函数中的this
在讲箭头函数中的this之前我们先介绍一下普通函数中的this. 普通函数中的this: (1)this指向它的直接调用者 (2)默认的,非严格模式下,没找到直接调用者则指向window ( ...
- es6 箭头函数(arrow function) 学习笔记
箭头函数有两个好处. 1.他们比传统函数表达式简洁. const arr = [1, 2, 3]; const squares = arr.map(x => x * x); // 传统函数表达式 ...
- es6箭头函数讲解
es6箭头函数的用法 箭头函数是es6的一种函数的简写方法. 如下: var f = v = > v; //等同于 var f = function(v){ return v; } var su ...
- js中的this和箭头函数中的this
一.ES6 允许使用"箭头"(=>)定义函数. // var f = v => v;// 上面的箭头函数等同于: // var f = function(v) {// ...
- ES6 — 箭头函数
一 为什么要有箭头函数 我们在日常开发中,可能会需要写类似下面的代码 const Person = { 'name': 'little bear', 'age': 18, 'sayHello': fu ...
- 前端分享----JS异步编程+ES6箭头函数
前端分享----JS异步编程+ES6箭头函数 ##概述Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只 ...
随机推荐
- Git branch 和 Git checkout常见用法
git branch 和 git checkout经常在一起使用,所以在此将它们合在一起 1.Git branch 一般用于分支的操作,比如创建分支,查看分支等等, 1.1 git branch 不带 ...
- Java 并发性和多线程
一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...
- js省市联动
<html> <head> <script src="http://files.cnblogs.com/files/beiz/jquery-1.8.3.js&q ...
- 一款bootstrap树形js
http://www.htmleaf.com/Demo/201502141380.html
- ubuntu 常用命令集合版(二)【大侠勿喷,菜鸟欢迎】(转)
原文:http://page.renren.com/600759338/note/729595757 1.shutdown: 关闭系统,如果停留在TTY,请改用halt, poweroff等命令常用参 ...
- WGS84坐标和UTM坐标的转换
如题.做了一个Demo,主要是把最后面的参考资料1里面的脚本改成了C语言版本的. 代码: #ifndef __COORCONV_H__ #define __COORCONV_H__ #include ...
- [Ahoi2013]差异
后缀数组+单调栈 代码 #include<cstdio> #include<algorithm> #include<cstring> using namespace ...
- Thinking in UML-2-建模基础
建模的问题可以分为两个: 怎么建 模是什么 怎么建:角度不同决定了建模方向不同.所以首先要决定抽象的角度即建立这个模型的目的是什么. 模是什么:人+事+物+规则 我们这样来建立模型: 问题领域 = n ...
- sql join 优化
项目查询列表,需要新关联一张表,于是就让组下小伙更改了下sql语句,当再次进入列表查询时查询时间一下子就翻倍.那小伙找了半天没找原因. 于是我就打开代码查看,关联的一张表数据非常多,用的left jo ...
- java 级联删除文件夹下的所有文件
public void deletefile(String delpath) throws Exception { try { File file = new File(delpath); // 当且 ...