您如何判断js类方法是否是静态的?

时间:2019-02-05 11:41:06

标签: javascript class reflection

例如在javascript中,如何分辨两者之间的区别?

class Foo { 
   bar() {
   }
}

class Foo { 
   static bar() {
   }
}

尤其是如果我们允许继承,那么Foo可能会扩展Fo,这也可能会定义一个具有相同名称的方法。

上下文:我正在编写一个反射实用程序,该实用程序必须与其他人的代码一起使用,并且应该列出类的静态vs实例方法。

2 个答案:

答案 0 :(得分:1)

如果方法是静态的,它将显示为构造函数的属性:

typeof(Foo.bar) === 'function';  //true

如果方法是非静态的,它将仅出现在类原型上:

typeof(Foo.prototype.bar) === 'function';  //true
typeof(Foo.bar) === 'function';            //false

使用继承,您必须进行某种递归,但是使用当前语法整齐地获取继承链是很棘手的。

答案 1 :(得分:1)

static关键字为类定义了静态方法。在类的实例上不调用静态方法。而是在类本身上调用它们。这些通常是实用程序功能,例如用于创建或克隆对象的功能。 因此,您可以使用True进行检查。如果方法是static,它将返回{{1}},否则返回false