首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在JavaScript类中,子类可以默认调用它的超父方法吗?

在JavaScript类中,子类默认是不能直接调用它的超父方法的。在ES6之前,JavaScript中的类是通过原型链继承实现的,子类通过将父类的原型赋值给自己的原型来实现继承。这种继承方式并不会自动调用父类的构造函数,因此子类无法默认调用父类的超父方法。

然而,在ES6中引入了super关键字,它可以用于在子类的构造函数中调用父类的构造函数。通过在子类的构造函数中使用super()来调用父类的构造函数,可以实现子类默认调用父类的超父方法。super还可以在子类的其他方法中调用父类的同名方法。

需要注意的是,如果子类自己定义了构造函数,则必须在构造函数中调用super(),否则会导致错误。如果子类没有定义构造函数,则会默认生成一个空的构造函数,并自动调用super()

总结起来,子类可以通过在构造函数中使用super()来默认调用它的父类的构造函数,从而实现调用父类的超父方法。但在ES6之前,子类无法直接默认调用父类的超父方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Classes (类)

在许多语言中可以使用 super 来代替本例中的 inherited: ,它的含义是“超类”(superclass),表示当前类的父类/祖先类。...在传统的面向类的语言中 super 还有一个功能,就是从子类的构造函数中通过 super 可以直接调用父类的构造函数。通常来说这没什么问题,因为对于真正的类来说,构造函数是属于类的。...由于 JS 中父类和子类的关系只存在于两者构造函数对应的 .prototype 对象中,因此它们的构造函数之间并不存在直接联系,从而无法简单地实现两者的相对引用(在 ES6 的类中可以通过 super...ignition() 方法定义的多态性 取决于是在哪个类的实例中引用它。 在子类(而不是它们创建的实例对象!)中也可以相对引用它继承的父类,这种相对 引用通常被称为 super 。...子类对继承到的一个方法进行“重写”,不会影响父类中的方法,这两个方法互不影响,因此才能使用相对多态引用访问父类中的方法(如果重写会影响父类的方法,那重写之后父类中的原始方法就不存在了,自然也无法引用)。

25520

混合对象“类”

在许多语言中可以使用super来代替本例中的inherited,它的含义是超类(superclass),表示当前类的父类/祖先类。...中也可以相对引用它继承的父类,这种相对引用通常被称为 super。 还记得之前的那张图吗? ? image 注意这些实例(a1、a2、b1 和 b2)和继承(Bar),箭头表示复制操作。...从概念上来说,子类 Bar 应当可以通过相对多态引用(或者说 super)来访问父类 Foo 中的行为。需要注意,子类得到的仅仅是继承自父类行为的一份副本。...子类对继承到的一个方法进行“重写”,不会影响父类中的方法,这两个方法互不影响,因此才能使用相对多态引用访问父类中的方法(如果重写会影响父类的方法,那重写之后父类中的原始方法就不存在了,自然也无法引用)。...子类引用父类的方法,需要手动指定drive()方法吗? 如果B和C都继承了A类,且B和C都重写了A的drive(),那么D继承B和C该选择哪个呢? ?

74420
  • JS 面试题 大全

    5、javascript 创建对象的几种方式? 6、js 获取原型的方法? 7、什么是闭包,为什么要用它? 8、三种事件模型是什么? 9、哪些操作会造成内存泄漏?...10、简述javascript中this的指向? ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021032219142296.png?...***Es5中的继承有: ①.原型继承:父类的实例作为子类的原型 ②.借用构造函数继承:在子类中适用call方法,调用父类的方法,并将父类的this改为子类的this ③.组合继承:既可以调用父类实例的属性又能调用父类原型的属性...ES6有class继承: ①.class就相当于Es5中的构造函数 ②.class中定义的方法签后不能加function ,全部定义在class的prototype属性中 ③.class只能定义方法...,不能定义定义对象变量等 ④.class默认为严格模式 ⑤.在子类中,调用extends方法,可以调用父类的属性,用eat调用父类的方法 ---- 29、JS 中的主要有哪几类错误?

    1.6K30

    Java关键字(六)——super

    具体有如下几种用法: 1、调用父类的构造方法   Java中的继承大家都应该了解,子类继承父类,我们是能够用子类的对象调用父类的属性和方法的,我们知道属性和方法只能够通过对象调用,那么我们可以大胆假设一下...通过打印结果看到我们在创建子类对象的时候,首先调用了父类的构造方法,接着调用子类的构造方法,也就是说在创建子类对象的时候,首先创建了父类对象,与前面我们猜想的一致。   ...也就是说除了顶级类 Object.class 构造函数没有调用父类的构造方法,其余的所有类都默认在构造函数中调用了父类的构造函数(没有显式声明父类的子类其父类是 Object)。   ...而本篇博客介绍 super 关键字,我们知道了能够通过 super 调用父类的构造方法,那么这两个关键字能同时出现在子类的构造方法中吗?...接着调用 this() ,this() 方法会调用子类的构造方法,在子类的构造方法中又会对父类进行一次实例化。

    27230

    我来重新学习 javascript 的面向对象(part 5)

    Food里的属性(name 和 colors)和超类构造函数的原型对象的方法( sayName )都能够被继承,并且对于引用类型的值也不会出现相互影响的情况,而子类构造函数的属性(place)和子类构造函数的原型对象的方法...这里的属性继承是通过 call 方式,将父类的属性放到子类的构造函数里面,也就是借用构造函数模式。 这里的方法继承是通过将父类的实例放到子类的原型对象上,也就是原型链模式。...this.place = place; } // 将父类的实例赋值给子类的原型对象,实现方法继承 Fruit.prototype = new Food(); // 第一次调用父类构造函数 Fruit.prototype.constrcutor...这里将Object.create返回的新对象放到子类的原型对象里面,这样子类就拥有了父类的原型对象,也就实现了方法的继承。...没有出现引用类型的值共享问题,是因为在寄生(复制)之后才可以用原型链+构造函数的,这样就很好的隔离了超类和子类的引用类型的值的问题了。 总结 几乎涵盖了所有 javascript 的继承模式了: ?

    38910

    简单的JavaScript继承

    因此,在构造实例的时候,我们可以确保不在实例化模式下进行构建实例,并且可以相应的运行或者跳过 init()方法。 if ( !...保留父级方法 当你正在实例化的时候,创建一个类并且继承超类的方法,我们保留了访问被覆盖方法的能力,最后在这个特别的实现中,使用了一个新的临时方法( ...._super)来访问父类的相关方法,该方法只能从子类方法内部进行访问,并且该方法引用的是父类中原有方法。 例如,如果你想要调用父类的同名的方法,你可以这样做。...在合并过程中我们做了简单的检查:子类属性是否是一个函数、超类属性是否是一个函数、子类函数是否包含了 super引用。 注意,我们创建了一个匿名的闭包(返回了一个构造函数),将会封装并执行子类的函数。...我会在我写的书中覆盖更多的JavaScript原型系统背后的真相,我只是想把这个类实现放到这里,让每个人都尝试使用它。

    59420

    混合设计“类”

    类理论强烈建议父类和子类使用相同的方法名来表示特定的行为,从而让子类重写父类。我们之后会看到,在JavaScript代码中这样做会降低代码的可读性和健壮性。 类设计模式 “类”是设计模式?...中也可以相对引用它继承的父类,这种相对引用通常被称为Base。 还记得之前的那张图吗 注意这些实例(a1、a2、b1 和 b2)和继承(Bar),箭头表示复制操作。...子类对继承到的一个方法进行“重写”,不会影响父类中的方法,这两个方法互不影响,因此才能使用相对多态引用访问父类中的方法(如果重写会影响父类的方法,那重写之后父类中的原始方法就不存在了,自然也无法引用)。...多态并不表示子类和父类有关联,子类得到的只是父类的一份副本。类的继承其实就是复制。 多重继承 还记得我们之前关于父类、子类和 DNA 的讨论吗?...如果两个父类中都定义了Drive()方法的话,子类引用的是哪个呢?难道每次都需要手动指定具体父类的Drive()方法吗?这样多态继承的很多优点就存在了。 除此之外,还有一种被称为钻石问题的变种。

    18820

    【C++】继承

    那大家思考这样一个问题:既然子类和父类的类域或者说作用域是相互独立的,那在子类和父类中可不可以有同名的成员?...之前我们说过,在一个工程里面可以有同名的变量或函数等,只要它们不在同一个域就可以,因为在同一个域的话就会出现命名冲突的问题。 那在子类和父类中可以吗?...派生类的默认成员函数 在之前类和对象的学习中,我们学过类里面有6个默认成员函数 即我们不写,编译器可以自动生成,那在派生类中,这6个默认成员函数是如何生成的呢?...所以,我们要这样写 所以,这里我们就可以认为必须分开处理,子类的构造函数即使我们不写,默认生成构造函数的在初始化从父类继承下来的成员时也会自动去调父类的构造函数;如果我们自己实现了子类的构造函数...那如果我们写了构造,但不去处理从父类继承下来的成员呢? 我们不手动去调,在初始化列表还是会自动去调父类的默认构造。 那如果父类没有默认构造呢?

    14610

    JavaScript设计模式--模板方法模式

    一、定义 模板方法是基于继承的设计模式,可以很好的提高系统的扩展性。 java中的抽象父类、子类 模板方法有两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。...,在父类中封装了子类的算法框架。...这些算法框架在正常状态下是适用大多数子类的,但也会出现“个性”子类。 如上述流程,加调料是可选的。 钩子方法可以解决这个问题,放置钩子是隔离变化的一种常见手段。...; }; var tea = new Tea(); tea.init(); JavaScript没有提供真正的类式继承,继承是通过对象与对象之间的委托来实现的。...三、“好莱坞原则”:别调用我们,我们会调用你 典型使用场景: 模板方法模式:使用该设计模式意味着子类放弃了对自己的控制权,而是改为父类通知子类。作为子类,只负责提供一些设计上的细节。

    38441

    「设计模式 JavaScript 描述」模板方法模式

    但实际上,相同的行为可以被搬移到另外一个单一的地方,模板方法模式就是为解决这个问题而生的。在模板方法模式中,子类实现中的相同部分被上移到父类中,而将不同的部分留待子类来实现。...另一方面,当我们在 JavaScript 中使用原型继承来模拟传统的类式继承时,并没有编译器帮助我们进行任何形式的检查,我们也没有办法保证子类会重写父类中的“抽象方法”。...在 TypeScript中编译器会保证子类会重写父类中的抽象方法,但在 JavaScript 中却没有进行这些检查工作。...于是我们可以把这 4 个步骤都抽象到父类的模板方法里面,父类中还可以顺便提供第(1)步和 第(4)步的具体实现。当子类继承这个父类之后,会重写模板方法里面的第(2)步和第(3)步。 5....钩子方法(hook)可以用来解决这个问题,放置钩子是隔离变化的一种常见手段。我们在父类中容易变化的地方放置钩子,钩子可以有一个默认的实现,究竟要不要“挂钩”,这由子类自行决定。

    28510

    ja类主体和方法定义

    建设者 该constructor方法是用于创建和初始化使用创建的对象的特殊方法class。在一个类中,只能有一个名为“ constructor”的特殊方法。...当调用静态或原型方法而没有for的值时  this,例如通过将变量分配给该方法然后调用它,则该this值将undefined在方法内部。...例如,当使用诸如这样的方法map()返回默认构造函数时,您希望这些方法返回父Array对象而不是MyArray对象。...混入 抽象子类或混入是类的模板。ECMAScript类只能有一个超类,因此,例如,无法从工具类进行多重继承。该功能必须由超类提供。...具有超类作为输入和扩展该超类作为输出的子类的函数可用于在ECMAScript中实现混入: let calculatorMixin = Base => class extends Base { calc

    49420

    Harmony 开发的艺术 面向对象

    这个就是简单的封装的理解了 继承 Inheritance 继承就像是一个孩子继承了父母的某些特性。在面向对象编程中,一个类(子类)可以继承另一个类(父类)的属性和方法。...这样,子类就可以拥有父类的所有功能,同时还可以添加或覆盖自己的功能。 实现继承的目的是实现代码重用。通过继承,我们可以避免重复编写相同的代码,只需要在父类中定义一次,然后在子类中继承即可。...class 子类 extends 父类 如上图所述,现实中不管是 I人还是E人,都存在吃饭和跑路的功能。因此可以采用继承的方式来管理它们。...在面向对象编程中,多态指的是不同的对象对同一消息做出不同的响应。具体来说,就是父类引用可以指向子类对象,并且当通过这个引用调用方法时,会调用实际对象(可能是子类对象)的方法。...尽管每个对象的类型可能不同(圆形、矩形、三角形等),但由于它们都继承了“形状”类并实现了相同的“绘制”方法,因此你可以通过父类引用来统一调用它们的方法。这就是多态性的体现。

    4800

    每天10个前端小知识 【Day 9】

    如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超类”。继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码。...在子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。...ECMAscript将原型链作为实现继承的主要方法。 ES6提供了Class关键字来实现类的定义,Class 可以通过extends关键字实现继承,让子类继承父类的属性和方法。...说到js继承,最开始想到的应该是是原型链继承,通过把子类实例的原型指向父类实例来继承父类的属性和方法,但原型链继承的缺陷在于对子类实例继承的引用类型的修改会影响到所有的实例对象以及无法向父类的构造方法传参...构造函数继承, 通过在子类构造函数中调用父类构造函数并传入子类this来获取父类的属性和方法,但构造函数继承也存在缺陷,构造函数继承不能继承到父类原型链上的属性和方法。

    11010

    【小家java】类中静态代码块、构造代码块、静态变量、成员变量执行顺序和继承逻辑

    父类和子类的变量是同时存在的,即使是同名。子类中看到的是子类的变量,父类中看到的是父类中的变量,它们互相隐藏,而同名的方法则是实实在在的覆盖(重写),属性不存在重写哟。...但是,但是,但是,如果构造快为有参构造,请记得显示调用super方法,否则父类是不能被初始化的。如果子类的构造器没有显示地调用超类的构造器,则将自动调用超类默认(没有参数) 的构造器。...如果超类没有不带参数的构造器,并且在子类的构造器又没有显式地调用超类的其他构造器,则 java 编译器将报告错误 情况四:子类和父类有同名同类型的静态常量的时候 public class Main...至于spring中观察者模式的使用,我在后续文章中会重点分享,请持续关注 3、使用场景 各种设计模式,都会以此为依托,才能有更好的设计 子类默认调用父类构造函数问题 默认情况下,子类在使用构造函数初始化时...(不管是子类使用有参构造还是无参构造),默认情况下都会调用父类的无参构造函数(相当于默认情况调用了super())。

    1.5K20

    前端面试中小型公司都考些什么

    在 JavaScript 中,基本类型是没有属性和方法的,但是为了便于操作基本类型的值,在调用基本类型的属性或方法时 JavaScript 会在后台隐式地将基本类型的值转换为对象,如:const a =...JavaScript中的异步机制可以分为以下几种:回调函数 的方式,使用回调函数的方式有一个缺点是,多个回调函数嵌套的时候会造成回调函数地狱,上下两层的回调函数间的代码耦合度太高,不利于代码的可维护。...扩展操作符(…)使用它时,数组或对象中的每一个值都会被拷贝到一个新的数组或对象中。它不复制继承的属性或类的属性,但是它会复制ES6的 symbols 属性。...(2)第二种方式是使用借用构造函数的方式,这种方式是通过在子类型的函数中调用超类型的构造函数来实现的,这一种方法解决了不能向超类型传递参数的缺点,但是它存在的一个问题就是无法实现函数方法的复用,并且超类型原型定义的方法子类型也没有办法访问到...这种方式解决了上面的两种模式单独使用时的问题,但是由于我们是以超类型的实例来作为子类型的原型,所以调用了两次超类的构造函数,造成了子类型的原型中多了很多不必要的属性。

    44140

    js面试跳跳题二

    ,则使用OPCA将该对象转换为原原始值,再使用转换后的值比较 在以上的其他情况下,操作数都不相等 JS 中对象到字符串的转换经过如下这些步骤(简称 OPCA 算法): 如果方法 valueOf() 存在...call() 方法来继承父类属性,通改变子类原型,让原型指向父类的实例,就可以共享父类的方法了 这种继承方式优点在于构造函数可以传参,不会与父类引用属性共享,可以复用父类的函数,但是也存在一个缺点 就是在继承父类函数的时候调用了父类构造函数...,导致子类的原型上多了不需要的父类属性,存在内存上的浪费。...==使用 extends== 表明继承自哪个父类,并且在子类构造函数中必须调用 super ,因为这段代码可以看成 Parent.call(this, value) 【重点】promise...Promise.all() 方法 该方法指当所有在可迭代参数中的 promises 已完成,或者第一个传递的 promise(指 reject)失败时,返回 promise。

    17920

    大厂面试题典-注解可以继承吗,show me code?

    你也许认为类继承后,类的注解也可继承,子类重写父类方法后,父类方法上的注解也能作用于子类,确定吗? 1 案例 自定义注解 ?...父类的类和方法上的注解都可正确获得,但子类的类和方法却不能。即子类及子类的方法,无法自动继承父类和父类方法上的注解。 2 @Inherited元注解实现注解的继承 ? 日志输出 ?...子类可以获得父类类上的注解;子类的foo虽是重写父类方法,并且注解本身也支持继承,但还是无法获得方法上的注解。 因为@Inherited只能实现类上的注解继承。...如果带注解的元素是方法,则在超类中搜索方法 如下俩方法其实也很相像,有何区别呢?...我们假设继承后,RequestMapping对应的在父子类都能找到,处理起来肯定会很麻烦,在加上这几个注解默认都是单例的,所以是不能继承的。其实spring 官方对此也有回应。

    3.6K20

    一文完全吃透 JavaScript 继承(面试必备良药)

    call或者apply把父类中通过this指定的属性和方法复制(借用)到子类创建的实例中。...所有实例中就拥有了父类定义的这些this的属性和方法。 优势 相对于原型链而言,借用构造函数有一个很大的优势,即可以在子类型构造函数中向超类型构造函数传递参数。...而且,在超类型的原型中定义的方法,对子类型而言也是不可见的,结果所有类型都只能使用构造函数模式。考虑到这些问题,借用构造函数的技术也是很少单独使用的。...虽然子类型最终会包含超类型对象的全部实例属性,但我们不得不在调用子类型构造函数时重写这些属性。 寄生类继承 原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象。...这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。

    45210

    多态易错题

    由于子类中重写了父类中的sayName方法,所有父类构造器中调用的sayName方法其实会执行子类中的sayName 子类的属性的显式赋值是在调用完父类构造器之后进行的 所以父类构造器中调用的子类中的...当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。...它说:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。...但是为什么跟前面的分析得到的结果不相符呢?!问题在于我们不要忽略了蓝色字体的后半部分,那里特别指明:这个被调用的方法必须是在超类中定义过的,也就是被子类覆盖的方法。...B里面的show(B obj)在超类A中有定义吗?没有!那就更谈不上被覆盖了。实际上这句话隐藏了一条信息:它仍然是按照方法调用的优先级来确定的。

    62820
    领券