子类与父类同名方法会发生覆盖吗?
在JS中,我们使用ES6来实现类的继承,关于子类与父类具有同名的方法,我查看了网上很多的博客,大多都说子类会覆盖父类的同名方法,其实这样的说法是错误的,父类的同名方法并不会被覆盖,只是由于作用域链的查找规则,我们调用时,如果存在同名变量,一般都会应用子类的方法,但是不能说父类的同名方法被覆盖了,父类的同名方法依旧存在作用域链上。
class Father{
getItems(){
console.log('i am father')
}
}
class Child extends Father{
getItems(){
console.log('i am child')
}
}
先来看一下结果:
let c1=new Child()
c1.getItems() //i am child;
c1.__proto__proto__.getItems() // i am father
也就是说,子类与父类同名方法,并不会发生覆盖;
来看看Child的结构:
Child
---__proto__:Father
------constructor:f Child()
------getItems:f getItems() //i am child
------__.proto__:Object;
---------constructor:f Father()
---------getItems:f getItems() //i am father
以上就是子类与父类具有同名方法的一些纠错,希望大家能够自己动手实践来验证真伪。不要一味的相信那些随便抄来的博客。