`ES6`为什么会输出这个结果,程序是怎么执行的,有大佬可以解释一下吗?-灵析社区

博学的学渣

`ES6`为什么会输出这个结果,程序是怎么执行的,有大佬可以解释一下吗? class Parent { static myMethod(msg) { console.log('static', msg); } myMethod(msg) { console.log('instance', msg); } } class Child extends Parent { static myMethod(msg) { super.myMethod(msg); } myMethod(msg) { super.myMethod(msg); } } Child.myMethod(1); // static 1 var child = new Child(); child.myMethod(2); // instance 2

阅读量:175

点赞量:0

问AI
"static"表示这个属性/方法属于这个类本身,而不会被实例所拥有,也就是说"Child.myMethod"调用的是"static"标识的"myMethod","new Child().myMethod"调用的是没有"static"的那个"myMethod",如果"Child"只有"static myMethod",那"new Child().myMethod"调用就会报错: "截屏2024-03-01 19.39.17.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/64fe1b40bd8986fa463af6ad55ce8976.png) 当然如果你继承"extends"了类,那就会沿着父类链条一直往上找,整个链条都没有就会报错,哪个环节有就调用哪个 "截屏2024-03-01 19.41.04.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/e25f5cdcea9fb9a5c5c3976af0ebbb07.png) 这就是所谓原型链。 然后再讲"super","super"你可以理解为父级,具体指向谁取决于位于类属性 也就是有"static"标识还是实例属性 ,在类属性中就指向父类,实例属性就指向父实例属性,简单讲就是"static"中的"super.xxx"访问的是父类中的"static xxx",没有"static"的同理。 所以把你的例子转换一下就差不多是下面这样: class Parent { static myMethod(msg) { console.log('static', msg); } myMethod(msg) { console.log('instance', msg); } } class Child extends Parent { static myMethod(msg) { Parent.myMethod(msg); } myMethod(msg) { new Parent().myMethod(msg); } } Child.myMethod(1); // static 1 var child = new Child(); child.myMethod(2); // instance 2