类构造函数的未定义返回-JavaScript

时间:2018-09-18 12:06:37

标签: javascript node.js express

我有一个文件是block.js:

class Block{
    constructor(timeStamp, lastBlockHash, thisBlockData, thisBlockHash){
        this.timeStamp = timeStamp;
        this.lastBlockHash = lastBlockHash;
        this.thisBlockData = thisBlockData; 
        this.thisBlockHash = thisBlockHash;
        }

    static genesis(){
        return new this(Date.now(), "---", "genesis block", "hash of the genesis");
    }
}

我还有另一个文件blockchain.js,其中包含以下内容:

const Block = require('./block');
class BlockChain{
    constructor() {
       this.chain = BlockInstance.genesis();
    }
}

我在做一个测试文件:

const Block = require("./block.js");
const BlockChain = require("./blockchain.js");
console.log(BlockChain.chain);

我在打印输出中得到一个“未定义”的对象。这真的让我发疯了,因为我已经花了四个多小时。 如果有人可以为我解决这个谜团,那么我身上就会有一轮啤酒。

干杯, 炼金术士

2 个答案:

答案 0 :(得分:1)

您应该实例化类似的类

const Block = require("./block.js");
const BlockChain = require("./blockchain.js");
let block = new Block(...);
let blockChain = new BlockChain();
console.log(blockChain.chain);

有关使用JS构建区块链的示例,您可能需要关注This one from medium之类的网站

genesis()方法更适合成为链的一部分,因为那是链的属性,而不是其他类型的块。

答案 1 :(得分:0)

问题在于语法绑定。您需要像这样实例化BlockChain类:

const myBlockChain = new BlockChain();
console.log(myBlockChain.chain);

查看MDN以获得更多信息。