ES6 - 在类中调用静态方法

时间:2015-06-29 12:54:49

标签: javascript oop ecmascript-6

我有这个类对静态方法进行内部调用:

export class GeneralHelper extends BaseHelper{
     static is(env){
          return config.get('env:name') === env;
     }

     static isProd(){
         return GeneralHelper.is('prod');
     }
 }

我可以使用任何关键字替换下面一行中的类名:

GeneralHelper.is('prod');

在PHP中有selfstatic等.ES6是否提供与此类似的内容?

TY。

3 个答案:

答案 0 :(得分:59)

如果从实例内部调用静态函数,引用类静态函数的正确方法是:

this.constructor.functionName();

es6 call static methods

答案 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并覆盖isProdis会产生其他结果时,它可能与明确访问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;
    }
}

这个想法是可以在不创建类的新实例的情况下调用静态方法。这意味着你可以在实例的方法中调用它,就像你在实例之外调用它一样。

同样,我知道这不是问题的细节所要求的,但这可能对其他人有所帮助。