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
static
表示这个属性/方法属于这个类本身,而不会被实例所拥有,也就是说Child.myMethod
调用的是static
标识的myMethod
,new Child().myMethod
调用的是没有static
的那个myMethod
,如果Child
只有static myMethod
,那new Child().myMethod
调用就会报错:当然如果你继承
extends
了类,那就会沿着父类链条一直往上找,整个链条都没有就会报错,哪个环节有就调用哪个这就是所谓原型链。
然后再讲
super
,super
你可以理解为父级,具体指向谁取决于位于类属性也就是有static
标识还是实例属性,在类属性中就指向父类,实例属性就指向父实例属性,简单讲就是static
中的super.xxx
访问的是父类中的static xxx
,没有static
的同理。所以把你的例子转换一下就差不多是下面这样: