关于子类中重写父类中方法的问题

关于子类中重写父类中方法的问题

前言

在一道题中发现,子类在重写父类的方法时,会出现子类实例调用父类的方法而不是子类方法的情况。

一、父类使用箭头函数,子类使用传统函数

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());

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值