[英]Explanation, “this” syntax JavaScript
所以我正在制作一个节点应用程序,它在 class 构造函数中有一个条件语句,如果这个 then 变量等于那个,否则变量等于那个。 但是,当我初始化该变量时,我想根据带有“this”语法的 boolean 语句进行更改,它在控制台中给我一个错误。 为什么会这样? 如果我不能用 JS 中的“this”语法多次初始化它,我该如何初始化该变量?
更新:
我被告知“这个”在 JavaScript 中如何工作? 看看这是否有帮助,这与我的要求无关。 更具体地说,这就像我为什么要进行这个var test; if(true){var test = 1}else{var test = 0}
var test; if(true){var test = 1}else{var test = 0}
而不是 this 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)
第一个问题是你的条件:
this.secret === null || undefined
应该
this.secret === null || this.secret === undefined
如果您想明确但可以只使用双等号而不是三等号来获得真实的答案,其中包括 null 或未定义:
this.secret == null
第二个问题使您难以回答您的问题,完全不清楚this.words
是什么,您试图获得的length
以及原因。
例如,如果您尝试截断变量this.words
的最后一个字母,您可以:
const w = this.words.splice(0, this.words.length - 1)
只有字符串和 arrays 有一个length
,除非你在自己的类的原型中添加了一个 length 。 因此this.length
将不起作用,除非this
是一个字符串或数组或具有自定义长度方法的 class。
我假设您正在使用 import 语句在其他文件中调用您的 class 并在" "
中传递一个随机字符串。
如果是这种情况,那么您需要在class Wallet
中处理该输入并对其进行清理以获取预期输入。
不知何故,给定输入的某个地方有一个中断代码,例如\n
这是导致此错误的原因.. 可能使用typeof()
来检查您在这行代码之前是否有一个有效的字符串
this.keyPair = ec.keyFromPrivate(this.secret);
可以防止错误..
是的,之前答案中的问题也存在..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.