ES6中的箭头函数
关于函数表达式中的this:
自动引用正在调用当前方法的.前的对象
1、obj.fun()中的this
fun中的this -> obj
2、new Fun()
Fun中的this -> 正在创建的新对象
3、fun()和匿名函数自调
this -> window
4、类型.prototype.fun() fun中的this -> 将来调用fun的.前的子对象,子对象一定是当前类型
5、如果this不是想要的对象
fun.call(替换this的对象),相当于对象.fun()
ex:键盘事件
//var self=this;//②将this用变量self替换
//...
document.onkeydown=function(e){
switch(e.keyCode){
case 37:this.moveRow(1); break;
case 38:this.moveCow(1); break;
case 39:this.moveRow(-1); break;
case 40:this.moveCow(-1); break;
}
}.bind(this)//①
//...
ECMAScript6中的箭头函数:(Chrome 56版本以上支持)
语法:标识符 => 表达式
ex1:var result = values.sort(function(a, b){return a - b;});
function(a,b){return a - b;} -> (a, b) => a - b);
ex2:var sum = function(num1, num2){return num1 + num2;};
var sum = (num1, num2) => num1 + num2;
举例说明:
var obj = {
birth:1990,
getAge:function(){
var fun = function(){
return new Date().getFullYear() - this.birth;
};
return fun();
}
};
obj.getAge();//NaN
毫无疑问,上述代码输出结果为NaN,可通过绑定this,结果输出27;
getAge:function(){
var fun = function(){
return new Date().getFullYear() - this.birth;
}.bind(this);
return fun();
}
同样的,可以将上下文this缓存到一个变量中,以便在本函数作用域内包含另一个函数作用域的情况下可以继续使用此上下文对象this;
var obj = {
birth:1990,
getAge:function(){
var self = this;
var fun = function(){
return new Date().getFullYear() - self.birth;
};
return fun();
}
};
obj.getAge();//
更为简洁的方法,使用箭头函数代替;
var obj = {
birth:1990,
getAge:function(){
var fun = () => new Date().getFullYear() - this.birth;
return fun();
}
};
obj.getAge();//
//箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域;
//可以修复this的指向,始终指向词法作用域(静态作用域):在书写代码或者说定义时确定的;
箭头函数的绑定:
var obj = {
birth:1990,
getAge:function (year) {
var fun = (y) => y - this.birth;
return fun.call({birth:1992}, year);//call函数的第一个参数都是要传给当前对象的对象及函数内部的this;
}
};
obj.getAge(2017);//
补充:
箭头函数的确与传统函数有不同之处,但仍存在共同的特点;
1、对箭头函数进行typeof操作会返回“function”;
2、箭头函数仍是Function的实例,故而instanceof的执行方式与传统函数一致;
3、call/apply/bind方法仍适用于箭头函数,但就算调用这些方法扩充当前作用域,this也依旧不会变化;
箭头函数与传统函数最大的不同之处在,禁用new操作;
声明:本博客的文章除特殊说明外均为原创,转载请注明出处;
ES6中的箭头函数的更多相关文章
- ES6中的箭头函数与普通函数的区别
箭头函数与普通函数的区别 1.语法上更加简洁.清晰 基本语法: // 关于箭头函数的参数 // 如果箭头函数没有参数,直接写一个括号即可 let fun1 = () => { console.l ...
- ES6中的箭头函数和普通函数有什么区别?
1.普通函数中的this总是指向调用它的那个对象, 箭头函数没有自己的this,他的this永远指向其定义环境,任何方法都改变不了其指向,如call().bind().apply().(正是因为它没有 ...
- JS ES6中的箭头函数(Arrow Functions)使用
转载这篇ES6的箭头函数方便自己查阅. ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 基础语法 (参数1, 参数2, …, 参数N) => ...
- es6中的(=>)箭头函数
x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 箭头函数相当于匿名函数,并且简化了函数定义. 箭头函数有两种格式,一种像上面的,只包含 ...
- ES6中的箭头函数的语法、指向、不定参数
箭头函数的语法 function fn1() { console.log(1); } let fn2 = () => { console.log(2); } fn1()//1 fn2()//2 ...
- 聊聊 ES6 中的箭头函数
首先来两点: 当只有一个参数的时候,那么 () 可以省略 当只有一个 return 的时候,那么 {} 可以省略 当函数体内只有一条语句的时候,那么 {} 也可以省略 下面来几个简单的例子来对比 ES ...
- [js高手之路] es6系列教程 - 箭头函数详解
箭头函数是es6新增的非常有意思的特性,初次写起来,可能会觉得别扭,习惯之后,会发现很精简. 什么是箭头函数? 箭头函数是一种使用箭头( => )定义函数的新语法, 主要有以下特性: 不能通过n ...
- ES6学习之箭头函数
ES6学习笔记--箭头函数 箭头函数一直在用,最近突然想到重新看一下箭头函数的用法,所以这里做一些总结. 箭头函数长这个样子: let fn = a => a++; // fn 是函数名, a= ...
- es6学习笔记--箭头函数
基本用法 ES6允许使用“箭头”(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函 ...
随机推荐
- mongoDB数据库的简单使用
我的第一篇小文章,以前总是写Evernote. mongodb属于非关系型数据库中的文档型数据库. 1.下载安装mongoDB, 文件自动 存放在这个目录下:C:\Program Files\Mong ...
- 本地修改js代码并时时生效的解决办法
js作为客户端语言(当然它也可以作服务端语言),非常强悍,一般情况下,我们都是在开发阶段不停的改,然后上线之后就作为稳定运行的代码. 然而有时候可能因为js写得有问题,导致上线后,某些功能无法使用,这 ...
- Coursera 机器学习笔记(五)
主要第七周的内容:支持向量机 可以参考JerryLeed 的支持向量机SVM系列博客http://www.cnblogs.com/jerrylead 以及 pluskid的支持向量机系列博客http: ...
- profiler内存优化:警惕回调函数
最近做profiler内存优化,踩了一个深坑,觉得有必要做一下笔记. 过程是这样的,游戏启动后,会启动更新模块,加载更新界面,更新检测完成后会切换场景进入登陆界面.切换场景会自动释放上一个场景的资源. ...
- android登录实现,存储数据到/data/data/包名/info.txt
1.一个简单登录界面布局代码如下: @1采用线性布局加相对布局方式 @2线性布局采用垂直排列 <?xml version="1.0" encoding="utf-8 ...
- 关于iphone点击readonly的input虚拟键盘不消失的情况
今天遇到了一个比较棘手的问题,事情是这样的: 咱有一个添加地址的页面,大概长这样: 收货地址后那个"请选择收货地址"是一个readonly的input, 咱一进页面,直接点击这个& ...
- 使用ABP打造SAAS系统(1)——环境准备
一.前言 使用ABP也有一段时间了,很多东西是懂非懂,打算试着使用abp来搭建一套SAAS系统,与实际项目相互验证. 主要实现以下目标: 将ABP源码与实际项目相结合,后续可以修改相关源码来支持项目, ...
- Linux命令 文件备份归档恢复
cp [功能说明] 文件的备份 英文xxxx #cp命令将源文件复制到另外安全的地方,复制的文件和源文件是两个相互独立的文件,对认识一个文件的操作不影响另一个文件,但与符号链接文件中的硬链接是有区别 ...
- phpcms V9 后台验证码图片不显示
某个网站在本地运行成功,上传到服务器上后,发现后台登陆的验证码图片不显示 根据网上提供的解决方案, 网站路径变量web_path没问题 database.system的配置路径没问题 apache的G ...
- 前端程序员的蜕变——JS的 event 对象属性、使用实例、兼容性处理(极大提高代码效率、减少代码量)
下面讨论一下 js 中的 Event 对象,主要从以下三个方面详细的描述(点击标题可跳转到对应部分): 1.什么是event 2.怎么用event,用他该注意什么,几个简单实际应用 3.event在不 ...