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; }; 如果箭头函 ...
随机推荐
- 【Windows 10 应用开发】如何防止应用程序被截屏
今天老周只想跟大伙们分享一个小技巧,是的,小小的技巧,很简单,保证你能学会的,要是学不会,可以考虑跳泰山. 有些时候,我们可能会想到不要让应用程序界面上显示的内容被截屏,要阻止应用界面呈现在截图上,可 ...
- 一天搞定CSS:盒模型content、padding、border、margin--06
1.盒模型 网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物 ...
- threading多线程总结
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元.python当前版本的多线程库没有实现优先级.线程组,线程也不能被停止.暂停.恢复.中断. threading模块提供的类: ...
- 使用r.js来打包模块化的javascript文件
前面的话 r.js(下载)是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器 ...
- java基础(十一章)
一.理解什么是类和对象 万事万物皆对象 1.属性--对象具有的特征(特点) 2.方法--对象可执行的操作(能干什么事) 3.对象的定义: 是一个客观存在的,看的见或摸得着的 ...
- Mac 多个JDK的版本 脚本切换
这里配置jdk7和jdk8版本的切换 1.官网下载jdk7和jdk8 地址:http://www.oracle.com/technetwork/java/javase/downloads 2.安装两个 ...
- javaCV开发详解之技术杂烩:javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现功能,javaCV如何做到更快、更简单的实现相应的功能?等等一堆实用话题
前言: 该篇文章旨在帮助刚接触javaCV的盆友系统的认识音视频.javaCV.图像处理相关的体系知识和一些实用的知识. 序: javaCV早期因为内置了openCV库,所以常用来做图像识别应用,现在 ...
- (转)关于 Java 对象序列化您不知道的 5 件事
关于 Java 对象序列化您不知道的 5 件事 转自:http://developer.51cto.com/art/201506/479979.htm 数年前,当和一个软件团队一起用 Java 语言编 ...
- mailto调用本地默认客户端发邮件
下面介绍如何利用 Mailto功能: 实现 Mailto的基本html代码: <a href="mailto:123@qq.com">点击这里发邮件!</a> ...
- require 增量更新与版本管理
使用require.js 加载JS文件时,当JS文件有更新,可以通过更改全局版本号( urlArgs : 'v=1'),告诉浏览器加载新的文件. 但该方法虽然使用方便,但美中不足的是有些不需要更新的文 ...