我有以下情况。我希望能够在基类(寄存器)上定义静态方法,该方法使用对其他静态属性的引用,这些属性应该被覆盖。例如:
class Base {
constructor() { }
public static name = "Override me please";
public static register = function() { console.log( Base.name ) }
}
class Child extends Base {
constructor() { super() }
public static name = "Child";
}
然后我当然希望Child.register()打印出来的孩子'。是否可以获得当前类的引用?我知道我总是可以传入对类的引用,但这似乎不如直接引用该类更优雅。
任何帮助表示赞赏!谢谢!
答案 0 :(得分:2)
这是一个实现你做的事情。
class Base {
constructor() { }
public static aname = "Override me please";
public static register = function() { console.log( this.aname ) }
}
class Child extends Base {
constructor() { super() }
public static aname = "ChildName";
}
有两点需要注意。
JavaScript this
绑定的工作方式。当您致电Child.register()
时,this
基本上会引用.
左侧的内容。在这"静态"上下文,这将引用"构造函数"生成的JavaScript中的函数,即" Class"在TypeScript中。
因为this
引用了一个函数(在JavaScript中),name
是函数的标准属性,并且您对该属性的命名可能需要更改(但是,这可能不是根据{{3}}),是标准的。您拥有Child.name = "Child"
值的事实可能掩盖了这一点。
答案 1 :(得分:0)
您可以使用所有JavaScript函数constructor
上可用的prototype
属性,因此可以使用实例__proto__
:
class Base {
constructor() { }
public static name = "Override me please";
public static register = function() { console.log( Base.name ) }
}
class Child extends Base {
constructor() {
super();
console.log(this.constructor['name']); // use local version
}
public static name = "Child";
}
var child = new Child();