错综复杂的;超级";javascript中的关键字

错综复杂的;超级";javascript中的关键字,javascript,class,oop,inheritance,super,Javascript,Class,Oop,Inheritance,Super,我有以下两个javascript类:Animals&Cat(Cat扩展Animal)。两个类都将有一个improduct()方法;但是,Cat类需要该方法中的一些附加信息。因为我不想复制整个方法,所以我想到了三种实现方法 我在Cat类的import()方法下的注释中写出了三种方法 第一个版本不起作用。这对我来说很有意义,因为它使用了错误的上下文 第二个版本确实有效。这对我来说也是有意义的,因为我正在使用call()显式设置上下文 第三个版本确实有效。这对我来说毫无意义。这与第一个版本有何不同?s

我有以下两个javascript类:
Animals
&
Cat
Cat
扩展
Animal
)。两个类都将有一个
improduct()
方法;但是,
Cat
类需要该方法中的一些附加信息。因为我不想复制整个方法,所以我想到了三种实现方法

我在Cat类的import()方法下的注释中写出了三种方法

  • 第一个版本不起作用。这对我来说很有意义,因为它使用了错误的上下文
  • 第二个版本确实有效。这对我来说也是有意义的,因为我正在使用
    call()
    显式设置上下文
  • 第三个版本确实有效。这对我来说毫无意义。这与第一个版本有何不同?
    super
    关键字是否会改变上下文
  • 任何帮助都将不胜感激-谢谢

    类动物{
    建造师(姓名、年龄、腿、种类、状态){
    this.name=名称;
    这个。年龄=年龄;
    这个。腿=腿;
    这个物种=物种;
    这个状态=状态;
    }
    介绍(){
    return`Hello,我的名字是${this.name},我是${this.age}岁和${this.status}`;
    }
    }
    猫科动物{
    构造函数(名称、年龄、状态){
    超级(姓名、年龄、4、‘猫’、状态);
    }
    介绍(){
    //return Animal.prototype.introduction()+'Meow-Meow!';
    //return Animal.prototype.incroduction.call(this)+“喵喵喵!”;
    //return super.introduction()+'Meow-Meow!';
    }
    }
    
    第三种方法是实现这一目标的标准方法。其功能与第二版相同。在
    super[method]()
    形式的调用中,当前对象(
    this
    )被设置为上下文


    请参阅。

    “这与第一个版本有何不同?”因为
    super
    关键字正是针对这种情况创建的?如果它对任何复杂的东西都不起作用,那么它就没有意义了。@CRice好吧,
    super
    在其他OOP语言中用于与类的父定义交互。因此,如果您有
    someMethod(one){super.someMerhod(one,“two”);}
    您将调用该方法的父版本。在该代码示例中,需要提供一个单参数覆盖,其中父参数采用两个参数。因此,JS中保留了相同的OOP语义,因此它与传统的OOP没有太大区别。毕竟,
    类的引入是为了模仿传统的面向对象编程。所以,
    super.someMethod()
    是在做
    这个。