super 关键字

我们知道,this关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。

  1. const proto = {
  2. foo: 'hello'
  3. };
  4. const obj = {
  5. find() {
  6. return super.foo;
  7. }
  8. };
  9. Object.setPrototypeOf(obj, proto);
  10. obj.find() // "hello"

上面代码中,对象objfind方法之中,通过super.foo引用了原型对象protofoo属性。

注意,super关键字表示原型对象时,只能用在对象的方法之中,用在其他地方都会报错。

  1. // 报错
  2. const obj = {
  3. foo: super.foo
  4. }
  5. // 报错
  6. const obj = {
  7. foo: () => super.foo
  8. }
  9. // 报错
  10. const obj = {
  11. foo: function () {
  12. return super.foo
  13. }
  14. }

上面三种super的用法都会报错,因为对于 JavaScript 引擎来说,这里的super都没有用在对象的方法之中。第一种写法是super用在属性里面,第二种和第三种写法是super用在一个函数里面,然后赋值给foo属性。目前,只有对象方法的简写法可以让 JavaScript 引擎确认,定义的是对象的方法。

JavaScript 引擎内部,super.foo等同于Object.getPrototypeOf(this).foo(属性)或Object.getPrototypeOf(this).foo.call(this)(方法)。

  1. const proto = {
  2. x: 'hello',
  3. foo() {
  4. console.log(this.x);
  5. },
  6. };
  7. const obj = {
  8. x: 'world',
  9. foo() {
  10. super.foo();
  11. }
  12. }
  13. Object.setPrototypeOf(obj, proto);
  14. obj.foo() // "world"

上面代码中,super.foo指向原型对象protofoo方法,但是绑定的this却还是当前对象obj,因此输出的就是world

es6 super 关键字相关推荐

  1. es6 super关键字

    super关键字 super这个关键字,既可以当作函数使用,也可以当作对象使用.在这两种情况下,它的用法完全不同. 第一种情况,super作为函数调用时,代表父类的构造函数.ES6 要求,子类的构造函 ...

  2. ES6——super关键字

    super关键字有两种使用场景 1.当用作方法时 在ES6的构造函数中,ES6的语法规定,在继承于父类的子类的构造函数中,必须使用super(),因为在子类中是不存在上下文指向(this)的,需要使用 ...

  3. ES6的 super 关键字

    Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多. 子类必须在constructor方法中调用super方法,否则新建实例时会报错. 这是因为子 ...

  4. ES6 (二十二)Class 的继承、extends关键字、super 关键字(函数调用(constructor)、对象(父类原型对象))、原型对象(原型链)、Mixin 模式

    ES6 (二十二)Class 的继承.extends关键字.super 关键字(函数调用(constructor).对象(父类原型对象)).原型对象(原型链).Mixin 模式 文章目录 ES6 (二 ...

  5. ES6 class关键字 ~ 非常详细

    下面的对ES6中class关键字的整理,希望可以帮助到有需要的小伙伴~ 文章目录 类的声明 构造函数 getter与setter 不允许提前声明 不允许重复声明 静态方法 静态方法的语法 类的继承 实 ...

  6. JavaScript中解析super关键字

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...

  7. This和Super关键字的对比

    this和Super关键字 this和Super关键字的对比 Super关键字的用法如下: 1. super关键字代表了父类空间的引用: 2. super关键字的作用: 3. super关键字调用父类 ...

  8. Java基础学习总结(8)——super关键字

    2019独角兽企业重金招聘Python工程师标准>>> 一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们 ...

  9. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

最新文章

  1. Hyperscan-5.1.0 安装
  2. 380v pcb 接线端子_插拔式PCB接线端子选型参考
  3. windows睡眠(休眠)唤醒助手_Windows快速启动背后的功臣:休眠
  4. Java数据类型处理判断
  5. 【C++入门】C++ 继承和派生
  6. Android中导入Unity项目,界面点击事件失去焦点问题
  7. mysql 循环插入记录
  8. 快速开发框架V0.001(免费、100%开源)
  9. 用ping IP的方法测试网卡
  10. Steam WIN+R喜加一游戏管理工具 Steam Code Manager
  11. Android Binder 机制详解
  12. 小米盒子显示未连接电脑连接服务器,小米盒子不能连接电脑的原因与解决办法...
  13. 如何用电脑下载网页中的视频?
  14. 题库接口API 系统完善
  15. html自动调音量,HTML5 音量调节控件
  16. java打印直角三角形解析_编写java程序,打印3个5行直角三角形图案 运行效果如下: 使用 方法 实现 代码截图,必须含有2位学号+姓名_学小易找答案...
  17. 云聚创新力量,助力多云互联:Tungsten Fabric在联通沃云峰会2019上分享开源SDN
  18. oracle dba_waiters中的lockid是什么,SQL Server和Oracle中的锁和死锁(三)
  19. 【信号去噪】基于蚁群算法优化小波阈值实现信号去噪附matlab代码
  20. 短视频是一种值得被鼓励的创作形式么?

热门文章

  1. vmware 克隆 LVM 分区的系统
  2. puppet-dashboard安装及用apache和nginx进行管理
  3. JAVA连接Mysql事例
  4. 【常见Web应用安全问题】---1、Cross Site Scripting
  5. PL/SQL 结构与实例
  6. java编程二十_Java语言程序设计(二十)编程练习
  7. acm 凹多边形面积_解析几何|面积的计算
  8. jmeter中控制器3个请求其中一个访问不到_性能测试干货丨盘点JMeter常见的逻辑控制器...
  9. android textview获取背景颜色,Android TextView背景颜色与背景图片设置
  10. win7 双屏 双工具栏_不知道这几个双屏操作技巧,你的显示器就白买了