请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

constructor里的super

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

正在回答

2回答

双越 2018-03-20 16:01:45

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

0 回复 有任何疑惑可以回复我~
  • 提问者 wztf #1
    谢谢老师    是不是可以这样理解     子类如果没有定义和父类同名属性(比如父类里定义name ,子类里不定义name属性),父类如果有方法会调用到该属性时 super就必须传过去参数    如果定义相同的属性,super里就不需要传参数,父类的方法同样可以用到该属性
    回复 有任何疑惑可以回复我~ 2018-03-20 17:40:59
  • 双越 回复 提问者 wztf #2
    对的!
    回复 有任何疑惑可以回复我~ 2018-05-02 18:15:21
Jesse1990 2018-05-02 17:07:18

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 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信