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
直接不同吗?谢谢!不知怎么的,我忘了我没有使用“正常”的类方法。谢谢!我忘了我没有使用“普通”类方法。