Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ES6 javascript继承_Javascript_Oop_Ecmascript 6 - Fatal编程技术网

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');
}