ES6 javascript继承
提供以下代码:ES6 javascript继承,javascript,oop,ecmascript-6,Javascript,Oop,Ecmascript 6,提供以下代码: class Person { constructor(name) { this.name = name; } sayHello() { console.log('Hello, my name is ' + this.name); } sayHelloAndBy() { this.sayHello(); console.log('Bye'); } } class Stu
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log('Hello, my name is ' + this.name);
}
sayHelloAndBy() {
this.sayHello();
console.log('Bye');
}
}
class Student extends Person {
constructor(name, grade) {
super(name);
this.grade = grade;
}
sayHello() {
console.log(`Hi, I'm a studend and my name is ` + this.name);
}
}
let b = new Student("Some guy", 5);
b.sayHelloAndBy();
我想找出一种调用sayHello
的方法,定义见Person
,而不是Student
。可能吗
在php中,有一个
self::
允许这样做,但我不确定JS是否有类似的概念 您可以通过Person
的原型属性引用sayHello
中定义的Person
版本,并使用必要的this
调用它:
可运行:
班级人员{
建造师(姓名){
this.name=名称;
}
你好{
log('Hello,我的名字是'+this.name);
}
sayHelloAndBye(){
Person.prototype.sayHello.call(this);
console.log('Bye');
}
}
班级学生延伸人{
建造师(姓名、级别){
超级(姓名);
这个。等级=等级;
}
你好{
log(`Hi,我是studend,我的名字是`+this.name);
}
}
让b=新生(“某个家伙”,5);
b、 sayHelloAndBye()代码>取决于您要从何处调用它。那么,您想在哪里调用Person的sayHello方法呢?您可以在方法中使用super
来引用重写的父方法。Person.prototype.sayHello.call(this)
super。sayHello
就是你要找的人for@Ryan这将改变sayHello中的上下文。这将指向sayHello中的子对象,而不是父对象。我很确定这就是OP所要寻找的。但是,如果这是理想的行为,那么更干净的方法可能是将逻辑放入一个不应该被覆盖的新方法中。也就是说,\u sayHello(){…}sayHello(){this.\u sayHello();}sayHelloAndBy(){this.\u sayHello();…}
(或者简单地在类外定义一个函数并调用该函数)。
sayHelloAndBye() {
Person.prototype.sayHello.call(this);
console.log('Bye');
}