constructor里的super
来源:2-11 class - 继承
wztf
2018-03-20
看class类继承的时候,constructor里必须调用super方法,里面传入name 参数,试了下传入任意变量或不传的时候,得到的结果是一样的,super里面的参数究竟是起何作用呢?
写回答
2回答
-
“试了下传入任意变量或不传的时候”——你试试在父 class 中增加一个方法,获取 name 属性,这样的话,super 传入 name 就能起作用了。
022018-05-02 -
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
10
相似问题