关于子类中重写父类中方法的问题
文章目录
前言
在一道题中发现,子类在重写父类的方法时,会出现子类实例调用父类的方法而不是子类方法的情况。
一、父类使用箭头函数,子类使用传统函数
class Animal {
sayName = () => {
throw new Error('你应该自己实现这个方法');
}
}
class Monkey extends Animal {
sayName() {
console.log('I love coding');
}
}
const monkey = new Monkey();
monkey.sayName(); // Error('你应该自己实现这个方法')
这里调用了父类的方法
二、父类使用传统函数,子类使用箭头函数
class Animal {
sayName() {
throw new Error('你应该自己实现这个方法');
}
}
class Monkey extends Animal {
sayName = () => {
console.log('I love coding');
}
}
const monkey = new Monkey();
monkey.sayName(); // I love coding
这里调用了子类的方法
三、父类使用传统函数,子类使用传统函数
class Animal {
sayName() {
throw new Error('你应该自己实现这个方法');
}
}
class Monkey extends Animal {
sayName() {
console.log('I love coding');
}
}
const monkey = new Monkey();
monkey.sayName(); // I love coding
调用了子类方法
四、父类使用箭头函数,子类使用箭头函数
class Animal {
sayName() {
throw new Error('你应该自己实现这个方法');
}
}
class Monkey extends Animal {
sayName() {
console.log('I love coding');
}
}
const monkey = new Monkey();
monkey.sayName(); // I love coding
调用了子类方法
总结
综上,只有在父类使用箭头函数,子类使用传统函数时,子类实例会调用父类方法?。。。
————————————————————分界线——————————————————
这是因为,在类中用=
赋值就会挂载到实例上,可以参考属性的赋值。
class Test {
t1 = 't1';
t2 = () => {
console.log('t2');
}
t3() {
console.log('t3');
}
}
console.log(Test.prototype);
console.log(new Test());