在项目中,child继承base的时候,需要重新修改base.fun的逻辑,但是有些情况下面并不是简单的覆盖,而是在base.fun的逻辑基础上进行加工处理。

刚开始接触es6的时候也许都遇到过,child重写了base的fun函数,就是不起作用

先来段正常的代码,看下面的逻辑,这段代码在chrome中可以直接运行

 class Base {
static classMethod() {
console.log('Base classMethod')
}
constructor() {
this.key = 'Base';
console.log('Base constructor')
}
fun() {
console.log('Base fun')
}
}
class Child extends Base {
static classMethod() {
super.classMethod();
console.log('Child classMethod')
}
constructor() {
super();
this.key = 'Child';
console.log('Child constructor')
}
fun() {
super.fun();
console.log('Child fun')
}
}
new Child().fun();

  运行结果:

  

但是我们常常会遇到,设计base的时候,fun是给组件事件使用的,需要通过箭头函数进行this绑定,所以就给base.fun加了个箭头函数。

这个写法chrome不支持,需要借助babel转义,通过在线的https://babeljs.cn/repl/进行在线转下,在chrome进行运行

  

运行结果:

  

神奇的事情发生了,只打印了Base fun,那我们就需要仔细看下转义的代码。

  

  发现Base.fun在constructor的时候变成了this.fun,Child.fun在obj.__proto__.fun在原型链上,所以Base.fun的优先寻找到

执行new Child().__proto__.fun()的时候也报错了,Base.prototype.fun也不存在了

  所以在写业务的时候,不需要考虑这些问题,如果说是写的基础类,组件类,就要慎用箭头函数了

Base Class 慎用箭头函数的更多相关文章

  1. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  2. this 指向详细解析(箭头函数)

    前言 this 指向问题是入坑前端必须了解知识点,现在迎来了ES6时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,遂有此文 在非箭头函数下, this 指向调用其所在函数的对象,而 ...

  3. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  4. 【 js 基础 】【 源码学习 】柯里化和箭头函数

    最近在看 redux 的源码,代码结构很简单,主要就是6个文件,其中 index.js 负责将剩余5个文件中定义的方法 export 出来,其他5个文件各自负责一个方法的实现. 大部分代码比较简单,很 ...

  5. [转载]this 指向详细解析(箭头函数)

    本文转自:http://www.cnblogs.com/dongcanliang/p/7054176.html 为了以后更方便的查看,便做了转载 前言 this 指向问题是入坑前端必须了解知识点,现在 ...

  6. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  7. ES6箭头函数与展开运算符

    箭头函数:省去了关键字function和return: eg: reduce=(a,b)=>a+b;//返回a+b的值 redduce=(a,b)=>{console.log(a);con ...

  8. 箭头函数和Buffer对象

    一.箭头函数 普通函数1 var add = function (a, b) { return a + b; } 普通函数2 function add (a, b) { return a + b; } ...

  9. 深入理解this机制系列第三篇——箭头函数

    × 目录 [1]痛点 [2]解决 [3]基本用法[4]回调函数[5]注意事项 前面的话 this机制与函数调用有关,而作用域则与函数定义有关.有没有什么是可以将this机制和作用域联系起来的呢?本文将 ...

随机推荐

  1. python基础----列表生成式、生成器表达式

    结论: 1.把列表解析的[]换成()得到的就是生成器表达式 2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存 3.Python不但使用迭代器协议,让for循环变得更加通用 ...

  2. oracle 数据库记录

    /*----------------------------------------------------------------------------*/ 问题1[--------] Selec ...

  3. oracle 时间

    select to_char(to_date(sysdate,'yyyy-mm-dd'),'day') from dual; select to_date('2017-12-31','day') fr ...

  4. BNU-2017.7.5排位赛3总结

    链接:https://www.bnuoj.com/v3/contest_show.php?cid=9148#info A题 满足条件的只有(1,2,4),(1,2,6),(1,3,6),所以先满足4, ...

  5. discuz更换域名,登录不了解决

    准备工作 :因为域名更换了,因此原域名就不能再进后台了,请申请好新域名,并正确备案,让机房添加白名单,重新解析,重新绑定空间..... 完成一系列工作后,进入DZ程序修改. ------------- ...

  6. eclipse中修改svn用户名和密码

    开发中有时候用公共的电脑提交一些代码,eclipse没有专门的切换svn账户的功能.查阅资料得出解决办法: 1. 查看你的Eclipse 中使用的是什么SVN Interface  windows & ...

  7. Linux高级编程--04.GDB调试程序(入门概述)

    GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试 ...

  8. WPF:ComboBox使用XmlDataProvider做级联

    程序功能: 使用ComboBox做级联,数据源为XML文件,适合小数据量呈现 程序代码: <Window x:Class="WpfApplication1.LayouTest" ...

  9. javascript操作对象的方法

    with 确定某个对象的作用区域,在with代码段内的次对象的属性或方法可以直接使用. 例: //比如stu中有name,age属性和walk方法 with(stu) { alert(name+&qu ...

  10. 支付宝Android接口4.0以上报错Failure calling remote service

    很坑爹的问题,4.0一下没问题,完全按照接口文件写的.网上一查,很多人遇到.最好直接在4.2下调试,看看报错问题,然后度娘. 将RSA文件中的加上“BC”后测试通过...NND PKCS8Encode ...