簡體   English   中英

解釋,“this”語法 JavaScript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM