采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
看class类继承的时候,constructor里必须调用super方法,里面传入name 参数,试了下传入任意变量或不传的时候,得到的结果是一样的,super里面的参数究竟是起何作用呢?
“试了下传入任意变量或不传的时候”——你试试在父 class 中增加一个方法,获取 name 属性,这样的话,super 传入 name 就能起作用了。
谢谢老师 是不是可以这样理解 子类如果没有定义和父类同名属性(比如父类里定义name ,子类里不定义name属性),父类如果有方法会调用到该属性时 super就必须传过去参数 如果定义相同的属性,super里就不需要传参数,父类的方法同样可以用到该属性
对的!
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
登录后可查看更多问答,登录/注册
视频讲解前端面试中的JS高级知识点,扩展JS知识深度,从容面试
1.6k 7
1.3k 7
885 7
967 6
891 6