例如在javascript中,如何分辨两者之间的区别?
class Foo {
bar() {
}
}
和
class Foo {
static bar() {
}
}
尤其是如果我们允许继承,那么Foo
可能会扩展Fo
,这也可能会定义一个具有相同名称的方法。
上下文:我正在编写一个反射实用程序,该实用程序必须与其他人的代码一起使用,并且应该列出类的静态vs实例方法。
答案 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