constructor里的super

来源:2-11 class - 继承

wztf

2018-03-20

看class类继承的时候,constructor里必须调用super方法,里面传入name 参数,试了下传入任意变量或不传的时候,得到的结果是一样的,super里面的参数究竟是起何作用呢?

写回答

2回答

双越

2018-03-20

“试了下传入任意变量或不传的时候”——你试试在父 class 中增加一个方法,获取 name 属性,这样的话,super 传入 name 就能起作用了。

0
2
双越
回复
wztf
对的!
2018-05-02
共2条回复

Jesse1990

2018-05-02

super()相当于执行父class的构造函数。

class Animal {
  constructor(){
  this.type = 'animal';
   }
    speak(){
    console.log(this.type);
    }
}
class Cat extends Animal {
    constructor(){
        super();
        this.type = 'cat'
    }
}

相当于下面ES5的写法

function Animal(){
   this.type = 'animal';
}
Animal.prototype.speak = function(){
   console.log(this.type);
}
function Cat(){
  Animal.call(this);
  this.type = 'cat';
}
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;//因为上一步造成constructor为Animal


所以,我觉得如果能理解super()相当于把父构造函数的代码拉过来在子构造函数里执行一遍这一点的话,应该就没有疑问了,super里的参数其实就是父构造函数里的参数。


我之前写了一个总结,如有错误之处,帮忙指出一下,共同学习共同进步

https://github.com/JesseZhao1990/blog/issues/113


1
0

前端跳槽必备 一线互联网公司高级前端JavaScript面试

视频讲解前端面试中的JS高级知识点,扩展JS知识深度,从容面试

1621 学习 · 218 问题

查看课程