JS: this.constructor shorthand (从非静态调用静态方法)
JS: this.constructor shorthand (calling static methods from non-static)
我有一个带有实用静态方法的 JS class。考虑以下情况:
class A{
static util(){
//do something
}
some_method(){
//cumbersome
this.constructor.util();
}
};
class B extends A{
static util(){
//overrides super.util
//does something different
}
};
我使用静态方法作为管理 util 函数的方法,因为它很容易在扩展子class 中被覆盖。但问题是访问它们的方式相当冗长。是否有 shorthand 或创造性的方法使其更易于管理?
我可以重写子class中所有受影响的方法并交换所有 util 函数,而不是使用静态方法,但这将是一次散弹枪手术,会导致非常难以管理的代码,所以我想尽可能避免这种情况。
您可以在父 class 级别为 constructor
创建一个更简洁的别名。不确定这是否足以使它值得改进...
class A {
static util() {
console.log('a')
}
static otherUtil() {
console.log('not overridden');
}
get klass() {
return this.constructor;
}
some_method() {
// less cumbersome??
const klass = this.klass;
klass.util();
klass.otherUtil();
}
};
class B extends A {
static util() {
console.log('b')
}
};
let b = new B()
b.some_method()
如果我理解您的需要,您可以为每个 class 创建一个构造函数并将其自己的 util 函数绑定到名为 _util
的 class 属性。然后你可以做 this._util()
:
class A{
constructor() {
this._util = A.util
}
static util(){
console.log("util A")
}
some_method(){
this._util();
}
};
class B extends A{
constructor() {
super();
this._util = B.util
}
static util(){
console.log("util B")
}
};
new A().some_method()
new B().some_method()
我有一个带有实用静态方法的 JS class。考虑以下情况:
class A{
static util(){
//do something
}
some_method(){
//cumbersome
this.constructor.util();
}
};
class B extends A{
static util(){
//overrides super.util
//does something different
}
};
我使用静态方法作为管理 util 函数的方法,因为它很容易在扩展子class 中被覆盖。但问题是访问它们的方式相当冗长。是否有 shorthand 或创造性的方法使其更易于管理?
我可以重写子class中所有受影响的方法并交换所有 util 函数,而不是使用静态方法,但这将是一次散弹枪手术,会导致非常难以管理的代码,所以我想尽可能避免这种情况。
您可以在父 class 级别为 constructor
创建一个更简洁的别名。不确定这是否足以使它值得改进...
class A {
static util() {
console.log('a')
}
static otherUtil() {
console.log('not overridden');
}
get klass() {
return this.constructor;
}
some_method() {
// less cumbersome??
const klass = this.klass;
klass.util();
klass.otherUtil();
}
};
class B extends A {
static util() {
console.log('b')
}
};
let b = new B()
b.some_method()
如果我理解您的需要,您可以为每个 class 创建一个构造函数并将其自己的 util 函数绑定到名为 _util
的 class 属性。然后你可以做 this._util()
:
class A{
constructor() {
this._util = A.util
}
static util(){
console.log("util A")
}
some_method(){
this._util();
}
};
class B extends A{
constructor() {
super();
this._util = B.util
}
static util(){
console.log("util B")
}
};
new A().some_method()
new B().some_method()