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