我有这个类对静态方法进行内部调用:
export class GeneralHelper extends BaseHelper{
static is(env){
return config.get('env:name') === env;
}
static isProd(){
return GeneralHelper.is('prod');
}
}
我可以使用任何关键字替换下面一行中的类名:
GeneralHelper.is('prod');
在PHP中有self
,static
等.ES6是否提供与此类似的内容?
TY。
答案 0 :(得分:59)
答案 1 :(得分:40)
与calling a method on an ordinary object相同。如果您拨打GeneralHelper.isProd()
方法,GeneralHelper
将在方法中以this
的形式提供,因此您可以使用
class GeneralHelper {
static is(env) { … }
static isProd(){
return this.is('prod');
}
}
当方法作为回调函数just as usual传递时,这将不起作用。此外,当有人从您的班级继承GeneralHelper
并覆盖isProd
,is
会产生其他结果时,它可能与明确访问InheritedHelper.isProd()
不同。
如果您希望从实例方法调用静态方法,请参阅here。另请注意,仅定义静态方法的类是一个古怪的类,您可能希望使用普通对象。
答案 2 :(得分:21)
这里的两个答案都是正确和好的,但我想根据这个问题标题添加一个额外的细节。
当我看到" ES6 - 在一个班级中调用静态方法"听起来像#34;在类#34;中调用静态方法(来自非静态方法)。而不是最初的问题提问者在细节中提出的问题。
但是对于想要知道如何从类中的非静态方法调用静态方法的人来说,你可以这样做:
public static class IComparableExtensions
{
public static T Clamped<T>(this T value, T min, T max)
where T : IComparable<T>
{
return value.CompareTo(min) < 0 ? min : value.ClampedMaximum(max);
}
public static T ClampedMinimum<T>(this T value, T min)
where T : IComparable<T>
{
return value.CompareTo(min) < 0 ? min : value;
}
public static T ClampedMaximum<T>(this T value, T max)
where T : IComparable<T>
{
return value.CompareTo(max) > 0 ? max : value;
}
}
这个想法是可以在不创建类的新实例的情况下调用静态方法。这意味着你可以在实例的方法中调用它,就像你在实例之外调用它一样。
同样,我知道这不是问题的细节所要求的,但这可能对其他人有所帮助。