如何在Javascript中创建这种对象

时间:2018-01-22 14:05:22

标签: javascript node.js

我正在使用Node.js访问此hdPrivateKey,但它看起来像

 <hdPrivateKey...>

看起来不像普通的JS对象。

并且console.log(地址)看起来像

<Address: 19o9ghmkUrNVf4d57tQJuUBb2gT8sbzKyq, type: pubkeyhash, network: livenet>

console.log(Object.keys(address))看起来像

[ 'hashBuffer', 'network', 'type' ]

为什么密钥内部地址不同?

var bitcore = require('bitcore');
var HDPrivateKey = bitcore.HDPrivateKey;

var hdPrivateKey = new HDPrivateKey();
console.log(hdPrivateKey)
var retrieved = new HDPrivateKey(hdPrivateKey);
var derived = hdPrivateKey.derive("m/0");
var derivedByNumber = hdPrivateKey.derive(1).derive(2, true);
var derivedByArgument = hdPrivateKey.derive("m/1/2");

var address = derived.privateKey.toAddress();
console.log(Object.keys(address))
console.log(address)
// obtain HDPublicKey
var hdPublicKey = hdPrivateKey.hdPublicKey;

2 个答案:

答案 0 :(得分:1)

在Node.js中,console.log调用对象的函数inspect。在bitcore-lib中有这种方法:

HDPrivateKey.prototype.inspect = function() {
  return '<HDPrivateKey: ' + this.xprivkey + '>';
};

这个方法:

Address.prototype.inspect = function() {
  return '<Address: ' + this.toString() + ', type: ' + this.type + ', network: ' + this.network + '>';
};

答案 1 :(得分:1)

您看到的行为是因为该对象具有自己的inspect属性,该属性是一个函数并返回一个字符串。当console.log看到它正在记录对象时,它会查找该函数并在可用时使用它。所以在Node上,这会记录<foo>

const o = {
    inspect() {
        return "<foo>";
    }
};
console.log(o);

这就是HDPrivateKey对象所做的一切。

如果要正确检查对象,请使用调试器。或者,使用utils.inspect并将customInspect设置为false