-1

所以我制作了一个节点应用程序,它在类构造函数中有一个条件语句,如果这个那么变量等于那个,那么其他变量等于那个。然而,当我初始化该变量时,我想根据带有“this”语法的布尔语句进行更改,这在控制台中给了我一个错误。为什么会发生这种情况?如果在JS中无法使用“this”语法多次初始化该变量,我如何初始化它?

更新:

我被给予了JavaScript中的“this”是如何工作的?看看这是否有帮助,这与我的要求无关。更具体地说,我为什么能这样做var检验;if(true){var测试=1}否则{var检测=0}而不是这个if(true){this.test=1}其他{this.test=0}并且能够在我的应用程序中使用变量。

代码:

班级钱包{构造函数(机密){//添加了机密参数this.secret=秘密;this.balance=启动平衡;if(this.secret===空||未定义){this.keyPair=ec.genKeyPair();this.publicKey=this.keyPair.getPublic().encode('hex');}其他的{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:622var w=this.words[此长度-1];^TypeError:无法读取null的属性“-1”在BN.bitLength(/home/main/public_html/Cypher Network/node_modules/BN.js/lib/BN.js:622:23)在Point_has Doubles(/home/main/public_html/Cypher-Network/node_modules/eclimitary/lib/elimitary/curve/base.js:332:48)位于Point.mul(/home/main/public_html/Cypher-Network/node_modules/eclimitary/lib/elimitary/curve/short.js:426:17)在KeyPair.getPublic(/home/main/public_html/Cypher-Network/node_modules/eclimitary/lib/eclimit/ec/key.js:61:26)在新钱包(/home/main/public_html/Cypher-Network/src/Wallet/index.js:26:39)位于Object<匿名>(/home/main/public_html/Cypher-Network/src/blockchain/dataBlock.js:4:16)位于模块_编译(内部/modules/cjs/loader.js:1158:30)位于Object。模块_扩展。。js(内部/modules/cjs/loader.js:1178:10)在Module.load(internal/modules/cjs/loader.js:1002:32)位于函数。模块_加载(内部/modules/cjs/loader.js:901:14)
  • 这回答了你的问题吗?JavaScript中的“this”是如何工作的? 评论 2021年2月17日1:42
  • 所以为了以后的参考和减少混淆,我写的东西是按预期工作的,在JS中没有误用,对吧,epascarello?
    – 用户14930609
    评论 2021年2月17日1:45
  • 研究JS变量SCOPE,在JS中的var是有意义的,以及为什么和如何使用它。
    – 
    评论 2021年2月17日2:01

2个答案2

重置为默认值
0

第一个问题是你的条件:

this.secret===空||未定义

应该是

this.secret===空|| this.secred===未定义

如果你想显式地回答,但你可以用一个双等于而不是三元组来回答包含null或undefined的真实答案:

this.secret==空

第二个问题,让你很难回答你的问题,是完全不清楚什么this.words这个词就是你想得到的长度的,以及原因。

如果您试图截断变量的最后一个字母this.words这个词例如,您可以:

const w=this.words.splice(0,this.wordes.length-1)

只有字符串和数组具有长度,除非您已经为自己的类原型添加了长度。所以这个长度除非是一个字符串、数组或具有自定义长度方法的类。

  • 感谢您提供有用的信息,我将在对一些东西进行实验后再回到这里。
    – 用户14930609
    评论 2021年2月17日1:53
  • 这都源于我愚蠢的条件错误。谢谢你回答这个问题,我没有眼睛。
    – 用户14930609
    评论 2021年2月17日1:58
  • 2
    我觉得StackOverflow可以通过建立一个新站点来消除大量的否决票,这个站点明确地只是为了让你的代码有第二双眼睛来发现愚蠢的自我冲突错误。 评论 2021年2月17日2:05
0

我假设您正在使用import语句调用其他文件中的类,并在" ".

如果是这样,那么您需要在您的班级钱包并针对预期输入对其进行清理。。

不知怎么的,给定的输入在某个地方有一个中断代码,比如\n个这就是这个错误的原因。。也许是使用typeof()检查这行代码之前是否有有效的字符串

this.keyPair=ec.keyFromPrivate(this.secret);

可以防止错误。。

是的,前面答案中的问题也存在。。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.