子类与父类具有同名方法的秘密

845 阅读1分钟

子类与父类同名方法会发生覆盖吗?

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

以上就是子类与父类具有同名方法的一些纠错,希望大家能够自己动手实践来验证真伪。不要一味的相信那些随便抄来的博客。