如何在子构造函数Javascript ES6类中调用父方法?
我试图从子构造函数方法调用父构造函数中的方法,但我无法这样做。可以在子类的构造函数中调用父类的方法吗 我们需要这种构造,因为我们需要在不同的作用域中访问此。我创建了一个小示例代码来说明我们的问题:如何在子构造函数Javascript ES6类中调用父方法?,javascript,es6-class,Javascript,Es6 Class,我试图从子构造函数方法调用父构造函数中的方法,但我无法这样做。可以在子类的构造函数中调用父类的方法吗 我们需要这种构造,因为我们需要在不同的作用域中访问此。我创建了一个小示例代码来说明我们的问题: class Foo{ constructor() { this.classMethod = () => { console.log('In Foo'); }; } } class Bar extends Foo{
class Foo{
constructor() {
this.classMethod = () => {
console.log('In Foo');
};
}
}
class Bar extends Foo{
constructor() {
super()
this.classMethod = () => {
console.log('In Bar');
super.classMethod(); // How to call the this.classMethod() in Foo?
};
}
}
bar = new Bar();
bar.classMethod();
预期结果应为:
In Bar
In Foo
实际产量:
In Bar
TypeError: super.classMethod is not a function
In Bar
In Foo
当classMethod被移到构造函数的范围之外时,一切都按预期工作,除了我们不能访问上面链接的StackOverflow问题中所述的var self=this
class Foo{
constructor() { }
classMethod() {
console.log('In Foo');
};
}
class Bar extends Foo{
constructor() {
super();
}
classMethod () {
console.log('In Bar');
super.classMethod();
};
}
bar = new Bar();
bar.classMethod();
实际产量:
In Bar
TypeError: super.classMethod is not a function
In Bar
In Foo
是否可以通过子类构造函数中的方法调用父类构造函数中的方法?尝试以下操作:
class Foo{
constructor() {
this.classMethod = () => {
console.log('In Foo');
};
}
}
class Bar extends Foo{
constructor() {
super();
const originalClassMethod = this.classMethod.bind(this);
this.classMethod = () => {
console.log('In Bar');
originalClassMethod();
};
}
}
bar = new Bar();
bar.classMethod();
你的第一次剪发和第二次剪发之间有一个重要的区别。请注意,如果您这样定义一个类:
class Foo {
someMethod() {
return 'foo';
}
}
class Foo {
constructor() {
this.someMethod = () => 'foo';
}
}
然后,如果在控制台中键入:Foo.prototype.someMethod
,则可以访问该方法。但是,该方法不能绑定到任何实例,因为您还没有使用new
关键字,对吗
但是,如果您定义这样的类:
class Foo {
someMethod() {
return 'foo';
}
}
class Foo {
constructor() {
this.someMethod = () => 'foo';
}
}
不再是这种情况,因为在第二个示例中,当类被实例化时,在类的实例上定义了属性someMethod
。试试这个
class Foo {
constructor() {
this.classMethod = function () {
console.log('In Foo');
};
}
}
class Bar extends Foo{
constructor() {
super();
this.barClassMethod = function () {
console.log('In Bar');
this.classMethod(); // How to call the this.classMethod() in Foo?
};
}
}
bar = new Bar();
bar.barClassMethod();
另一个技巧是在构造函数中实例化父类并从中调用方法:
class Foo {
constructor() {
this.classMethod = () => {
console.log('In Foo');
};
}
}
class Bar extends Foo {
constructor() {
super()
this.classMethod = () => {
console.log('In Bar');
(new Foo).classMethod()
};
}
}
bar = new Bar();
bar.classMethod()