Javascript 那个类方法是异步的吗?(没有实例)

Javascript 那个类方法是异步的吗?(没有实例),javascript,class,asynchronous,ecmascript-6,Javascript,Class,Asynchronous,Ecmascript 6,我有一个非常简单的问题,我一直在四处寻找,但我找不到解决办法 以代码为例: class-Foo{ 条=()=>{ 返回“字符串” } baz=async()=>{ 返回“承诺” } } 我想知道类的特定方法是否是异步的 isAsync(Foo,'bar')//false isAsync(Foo,'baz')//true 问题是。。。我不想实例化它。 我找到的所有解决方案都在类实例上使用“getOwnPropertyNames”来获取函数 可能吗 谢谢! 问题是。。。我不想实例化它。我找到的所

我有一个非常简单的问题,我一直在四处寻找,但我找不到解决办法

以代码为例:

class-Foo{
条=()=>{
返回“字符串”
}
baz=async()=>{
返回“承诺”
}
}
我想知道类的特定方法是否是异步的

isAsync(Foo,'bar')//false
isAsync(Foo,'baz')//true
问题是。。。我不想实例化它。 我找到的所有解决方案都在类实例上使用“getOwnPropertyNames”来获取函数

可能吗

谢谢! 问题是。。。我不想实例化它。我找到的所有解决方案都在类实例上使用“getOwnPropertyNames”来获取函数

可能吗

在您的特定示例中,
bar
baz
是。这和写作一样

class Foo {
  constructor() {
    this.bar = () => {
       return 'string'
    };

    this.baz = async() => {
        return 'promise'
    };
  }
}
在实际创建类的实例之前,属性(和函数)不存在

因此,这个具体案例的答案是否定的

如果将函数声明为“普通”类方法,那么只需查看构造函数的
prototype
属性即可

问题是。。。我不想实例化它。我找到的所有解决方案都在类实例上使用“getOwnPropertyNames”来获取函数

可能吗

在您的特定示例中,
bar
baz
是。这和写作一样

class Foo {
  constructor() {
    this.bar = () => {
       return 'string'
    };

    this.baz = async() => {
        return 'promise'
    };
  }
}
在实际创建类的实例之前,属性(和函数)不存在

因此,这个具体案例的答案是否定的


如果您将函数声明为“普通”类方法,那么您只需查看构造函数的
prototype
属性。

谢谢您的回答,不创建新实例就可以实现这一点吗?@KevinGilbert,这种方式不可以,但是如果您不使用Anomium,而是
async baz(){}
而不是
baz=async(),它不可能是通用的,但在这种特殊情况下,它是唯一的选项,否则只有解析类代码才能解决问题谢谢你的回答,不创建新实例就可以实现这一点吗?@KevinGilbert,这种方式不,但是如果你不使用anonimous,而是
async baz(){}
而不是
baz=async())
那么是的,你可以通过
someClass.prototype[name][Symbol.toStringTag]
@KevinGilbert,我更新了我的答案,它可以以两种方式工作当然
const newInstance=new someClass()
可能不起作用或者有不希望的副作用…@FelixKling,是的,它不可能是通用的,但在这种特殊情况下,它是唯一的选项,否则只有解析类代码才能解决问题。在您的示例中,不实例化是不可能的,因为在创建实例之前,
bar
baz
不存在。检查这一点不是一个好主意。任何异步函数都可以很容易地重构为一个正常函数,该函数返回一个承诺,反之亦然,并且不应影响运行时行为。例如,如果您的
bar
函数没有
bar=()=>this.baz()
您真的希望它的行为与
baz
直接不同吗?在您的示例中,没有实例化是不可能的,因为在创建实例之前,
bar
baz
都不存在。检查这一点不是一个好主意。任何异步函数都可以很容易地重构为一个正常函数,该函数返回一个承诺,反之亦然,并且不应影响运行时行为。例如,如果您的
bar
函数没有
bar=()=>this.baz()
您真的希望它的行为与
baz
直接不同吗?谢谢!不知怎么的,我忘了我没有使用“正常”的类方法。谢谢!我忘了我没有使用“普通”类方法。