关于函数表达式中的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中的箭头函数的更多相关文章

  1. ES6中的箭头函数与普通函数的区别

    箭头函数与普通函数的区别 1.语法上更加简洁.清晰 基本语法: // 关于箭头函数的参数 // 如果箭头函数没有参数,直接写一个括号即可 let fun1 = () => { console.l ...

  2. ES6中的箭头函数和普通函数有什么区别?

    1.普通函数中的this总是指向调用它的那个对象, 箭头函数没有自己的this,他的this永远指向其定义环境,任何方法都改变不了其指向,如call().bind().apply().(正是因为它没有 ...

  3. JS ES6中的箭头函数(Arrow Functions)使用

    转载这篇ES6的箭头函数方便自己查阅. ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 基础语法 (参数1, 参数2, …, 参数N) => ...

  4. es6中的(=>)箭头函数

    x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 箭头函数相当于匿名函数,并且简化了函数定义. 箭头函数有两种格式,一种像上面的,只包含 ...

  5. ES6中的箭头函数的语法、指向、不定参数

    箭头函数的语法 function fn1() { console.log(1); } let fn2 = () => { console.log(2); } fn1()//1 fn2()//2 ...

  6. 聊聊 ES6 中的箭头函数

    首先来两点: 当只有一个参数的时候,那么 () 可以省略 当只有一个 return 的时候,那么 {} 可以省略 当函数体内只有一条语句的时候,那么 {} 也可以省略 下面来几个简单的例子来对比 ES ...

  7. [js高手之路] es6系列教程 - 箭头函数详解

    箭头函数是es6新增的非常有意思的特性,初次写起来,可能会觉得别扭,习惯之后,会发现很精简. 什么是箭头函数? 箭头函数是一种使用箭头( => )定义函数的新语法, 主要有以下特性: 不能通过n ...

  8. ES6学习之箭头函数

    ES6学习笔记--箭头函数 箭头函数一直在用,最近突然想到重新看一下箭头函数的用法,所以这里做一些总结. 箭头函数长这个样子: let fn = a => a++; // fn 是函数名, a= ...

  9. es6学习笔记--箭头函数

    基本用法 ES6允许使用“箭头”(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函 ...

随机推荐

  1. 修改tomcat图标

    页面上加入: 1 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon ...

  2. java并发编程(Exchanger)

    package org.bianqi.demo1; import java.util.concurrent.Exchanger; import java.util.concurrent.Executo ...

  3. phpcms通过URL传参

    在PHPCMS中都会遇到通过URL传参数的问题,但是默认的只能取到$catid.$page等这类的值,特别是伪静态之后,想获得其他参数根本不可能,有的人用$_GET["参数"]这种 ...

  4. 前端css要加的一些

    编码格式 @charset "utf-8"; body的外边距设置 margin:0; 标签设置 form,ul,ol,li设置为padding:0; ul,ol,li设置为lis ...

  5. 浅谈如何保证discuz插件安全

    1.非直接执行程序请加上 if(!defined('IN_DISCUZ')) { exit('Access Denied'); } 2.记得过滤 比如说uid等id需要intval过滤,避免溢出    ...

  6. PHP面向对象笔记解析

    PHP的面向对象是很重要的内容,也是很常用的内容.所以现在就把PHP面向对象进行整理了一下. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...

  7. gawk的用法

        GNU gawk工具的功能是将指定文件中符合指定模式(pattern)的行按指定的动作(action)进行格式化处理 语法:gawk [options] [program] [file-lis ...

  8. laravel中token的使用方式

    在form表单里提交表单时,可 <form action="" method="post"> <?php  echo csrf_field() ...

  9. php后台数组foreach嵌套循环

    <?php foreach($list as $key=>$val){ ?> <tr class="over_odd"> <td align=& ...

  10. [leetcode-560-Subarray Sum Equals K]

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...