Suppose we have the code
class A {
static foo = 1;
constructor() {
console.log(A.foo);
}
}
class B extends A {
static foo = 2;
constructor() {
super();
}
}
new A(); // prints "1"
new B(); // also prints "1", but make it print "2"
Here the constructor of A is accessing A.foo. When A is extended to B with a new value of foo, the constructor still prints 1, the value of A.foo, when really I want it to print the value of B.foo.
How would I modify this code such that the constructor prints the foo property of the current class?
CodePudding user response:
Use the constructor property to get access to the class itself, then you can refer to the static property from that.
class A {
static foo = 1;
constructor() {
console.log(this.constructor.foo);
}
}
class B extends A {
static foo = 2;
constructor() {
super();
}
}
new A(); // prints "1"
new B(); // also prints "1", but make it print "2"
CodePudding user response:
the super calls the constructor of the super class.
What you can do is the following
class A {
static foo = 1;
constructor(...args) {
if(args.length == 1){
console.log(args[0].foo)
}
else{
console.log(A.foo);
}
}
}
class B extends A {
static foo = 2;
constructor(...args) {
super(...args); // calls A.foo not B.foo
}
}
new A(); // prints "1"
new B(B); // pass the Class to it self as an arg
