【发布时间】:2021-02-17 01:38:11
【问题描述】:
所以我正在制作一个节点应用程序,它在类构造函数中有一个条件语句,如果这个 then 变量等于那个,否则变量等于那个。但是,当我初始化该变量时,我想根据使用“this”语法的布尔语句进行更改,它在控制台中给我一个错误。为什么会这样?如果我不能在 JS 中使用“this”语法多次初始化该变量,我该如何初始化它?
更新:
给了我How does 'this' work in JavaScript? 看看这是否有帮助,这与我的要求无关。更具体地说,这就像我为什么可以这样做 var test; if(true){var test = 1}else{var test = 0} 而不是 if(true){this.test = 1}else{this.test = 0} 并且能够在整个应用程序中使用该变量。
代码:
class Wallet {
constructor(secret) {
//ADDED SECRET PARAMETER
this.secret = secret;
this.balance = STARTING_BALANCE;
if(this.secret === null || undefined)
{
this.keyPair = ec.genKeyPair();
this.publicKey = this.keyPair.getPublic().encode('hex');
}
else
{
this.keyPair = ec.keyFromPrivate(this.secret);
this.storeKeys = this.keyPair.toString('hex');
//fs.writeFileSync('../secret.json');
this.publicKey = this.keyPair.getPublic().encode('hex');
}
}
控制台错误:
/home/main/public_html/Cypher-Network/node_modules/bn.js/lib/bn.js:622
var w = this.words[this.length - 1];
^
TypeError: Cannot read property '-1' of null
at BN.bitLength (/home/main/public_html/Cypher-Network/node_modules/bn.js/lib/bn.js:622:23)
at Point._hasDoubles (/home/main/public_html/Cypher-Network/node_modules/elliptic/lib/elliptic/curve/base.js:332:48)
at Point.mul (/home/main/public_html/Cypher-Network/node_modules/elliptic/lib/elliptic/curve/short.js:426:17)
at KeyPair.getPublic (/home/main/public_html/Cypher-Network/node_modules/elliptic/lib/elliptic/ec/key.js:61:26)
at new Wallet (/home/main/public_html/Cypher-Network/src/wallet/index.js:26:39)
at Object.<anonymous> (/home/main/public_html/Cypher-Network/src/blockchain/dataBlock.js:4:16)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
【问题讨论】:
-
这能回答你的问题吗? How does 'this' work in JavaScript?
-
所以为了将来的参考和减少混乱,我写的东西按预期工作,它不是在 JS 中滥用它,对吧 epascarello?
-
研究 JS 变量 SCOPE,在 JS 中的
thisvar 有意义之前,您需要了解作用域,以及为什么以及如何使用它。
标签: javascript node.js this