js call的继承方式,为什么删除call只通过new也是可以实现继承的?

    function Base() {
        this.name='name'
        this.age=18
    }
    Base.prototype={
        say() {
            alert('hi')
        },
        ex:'lucy'
    }
    function Student() {
        Base.call(this,arguments)//////  删除这句话也可以,为什么??????
        this.add='US'
    }
    Student.prototype=new Base()//只通过这个就行,那还要上面的call有什么用?
    
    let tom=new Student()
    tom.say()
阅读 1.7k
3 个回答

删除如下代码

Base.call(this,arguments)//////  删除这句话也可以,为什么??????

有没有上面的代码,tom这个变量的内容是不一样的。不知道你有没有发现。
本质上,如果不写这行代码的话,base 的构造函数不会执行,如果你不需要父类构造函数的逻辑,这样没有问题。
但是我猜你肯定需要的吧。

希望我的回答对你有帮助。 我的个人主页是https://azl397985856.github.io/ , 掘金主页 https://juejin.im/user/58af98...  

Base.call(this,arguments)

这句话是执行父类的构造函数,等同于class中的super()

JS的继承有多种 有原型对象继承 有修改构造函数继承 ,

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题