例如:
class Parent {
func1() {
console.log("I am func1, in class Parent");
}
func2() {
this.func1();
}
}
class Child extends Parent {
func1() {
console.log("I am func1, in class Child");
}
}
let a = new Child();
a.func2();
因为在调用a.func2()时“此”指向Child,所以它将输出“ Child类中的我是func1”。
但是现在我无论如何都希望Parent.func2()在任何情况下都始终调用Parent.func1(),即使“ this”与Child绑定了,我该怎么做?
我尝试了
func2() {
super.func1();
}
很明显,当父级调用func2()时,它将无法正常工作
let b = new Parent();
b.func2(); //not work
我想要这样的东西:
class Parent {
func1() {
console.log("I am func1, in class Parent");
}
func2() {
Parent.func1(); //always access Parent.func1() even if func1() is overrode.
}
}
请帮助。
答案 0 :(得分:4)
没有特殊的语法,您需要显式地引用要精确调用的方法:
class Parent {
func1() {
console.log("I am func1, in class Parent");
}
func2() {
Parent.prototype.func1.call(this);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
}
答案 1 :(得分:0)
我不知道。这对我有用。还是您还有其他打算?
class Parent {
constructor(t) {
this.t = t
console.log('Parent constructor', t)
}
func1() {
console.log("I am func1, in class Parent", this.t);
}
func2() {
this.func1();
}
}
class Child extends Parent {
constructor(t) {
// super() in constructor calls parent constructor
super(t);
console.log('Child constructor', t)
}
func1() {
console.log("I am func1, in class Child", this.t);
}
func2() {
// super refers to the parent class and thus
// super.func1() calls the func1 of Parent class
// not Child class
super.func1();
}
}
let a = new Child('A');
a.func2();
let b = new Parent('B');
b.func2();
答案 2 :(得分:0)
class Parent {
func1() {
console.log("I am func1, in class Parent");
}
func2() {
this.func1();
}
}
class Child extends Parent {
static func1() {
console.log("I am func1, in class Child");
}
}
let a = new Child();
a.func1();
a.func2();
Child.func1(); //Will call child's own static method,instead of parent
我在子类中使用静态方法,这可以选择。
答案 3 :(得分:0)
在ES6中,您可以在声明函数时使用粗箭头语法,这样做的好处是,在函数内部使用 this 时,它将始终指向类实例。因此,您可以像下面这样直接调用它。
class Parent {
func1= () => {
console.log("I am func1");
}
func2 = () => {
this.func1();
}
}