javascript - 在nodejs和打字稿中使用变量到静态方法
问题描述
我有一个类,这个类我需要使用静态方法,在那个方法中我使用变量,但它告诉我这个错误:
类型“typeof Wallet”.ts 上不存在属性“ec”
而且我不需要设置静态变量。
我该如何解决这个问题?
export class Wallet {
ec: any;
constructor() {
this.EC = elliptic.ec;
this.ec = new this.EC('secp256k1');
}
static verifySignuture(address: string, data: any, signature: any): boolean {
const keyfromPublic = this.ec.keyFromPublic(address, 'hex');
return keyfromPublic.verify(Utility.GenerateHash(data), signature);
}
}
如何解决这个问题?
解决方案
Javascript 类!= 此类的一个实例。
将类想象为由其中的字段定义的某种形状。您可以使用new
关键字来实例化此形状。在 javascript(以及打字稿)中,您可以将您的类的实例分配给一个变量。例如
const myWallet = new Wallet();
然后您可以将另一个实例分配给另一个变量
const someOtherWallet = new Wallet();
在这种情况下myWallet
和someOtherWallet
具有相同的shape
,但有两个相同形状(类)的独立实例。通过使用static
word,您将形状的字段分配给形状本身而不是构造的实例。所以如果你的方法是静态的,而不是调用this.myMethod()
你需要调用MyClass.myMethod()
- 在你的情况下Wallet.verifySignature()
。不同之处在于this
单词。它代表您在代码的特定部分中运行的 javascript 上下文。你可以在这里找到更多关于它的信息。类的方法的优点non-static
是能够访问this
这些方法中的上下文。如果您不需要访问this
,您可以继续使用静态方法。在第一种情况下(当我分配一个类的新实例时Wallet
myVallet
到一个名为,的局部变量this context
(在一个Wallet
类中)等价于一个名为 的变量myVallet
,但区别在于您要从哪里访问它。在您的情况下,您试图访问方法this
内部的上下文verifySignature
,这是错误的,因为在类的静态方法内部,this
上下文不是您的类的实例。而是在方法声明之前删除一个static
关键字并尝试这样的事情:
const wallet = new Wallet();
const signatureVerified = wallet.verifySignature(address, data, signature);
推荐阅读
- sockets - 为什么python套接字bannergraber返回错误?
- google-sheets - 当用户使用不同的语言时,工作表的名称会发生变化
- c# - 将自定义附加属性与基类和泛型一起使用
- gtrendsr - gtrendsr 无法随时间分析区域(状态)
- wordpress - 我想对特定 URL 集的 robots.txt 文件应用禁止指令
- material-ui - 在深色/浅色样式覆盖之间切换
- sql - 在 Nodejs Expess 应用程序中将会话数据插入 postgres 数据库
- css - react-bootstrap 上的 .flex-grow-1
不填充垂直空间
- linux - 连接到正在比赛的发球台
- java - 在 Android Studio 中构建 apk 时出现此错误是什么意思?