似乎没有在NodeJS

时间:2016-01-18 23:25:47

标签: javascript node.js

关于mozilla.org的文档指出:“每个对象都有一个toString()方法,当该对象被表示为文本值时,或者当一个对象以字符串为基础被引用时,会自动调用该方法。默认情况下,toString()方法由来自Object的每个对象继承。如果在自定义对象中没有覆盖此方法,toString()将返回“[object type]”,...“

听起来合乎逻辑:将调用toString()方法。所以我定义了一个自己的“类”并定义了一个toString()方法:

function DataField(name, dataType)  {
    // ....
}

DataField.prototype.toString = function() {
    return this.type.name + " " + this.name;
}

我实例化一个这样的对象:

var dataField = new DataField("myint", DataType.INTEGER);

我尝试在NodeJS中分别输出对象的字符串表示形式:

console.log(dataField);
console.log("" + dataField);
console.log(dataField.toString());

第一个输出与其他输出不同。第一个将给出对象的某种JSON.stringify()表示。 toString()不会像我预期的那样自动调用。第二个和第三个输出将完全符合我的期望:

INTEGER myint

所以我有点困惑。这意味着虽然mozilla.org的解释建议,但不会自动调用toString()。这是NodeJS中的常规行为还是我错过了解释mozilla.org上的解释或者我在这里错过了其他什么?

你可能会想:那么,如果有必要,让我们只是明确地调用toString(),一切都很好。但是有一些不便之处。如果我创建一个对象数组并使用console.log()来输出该数组,则不会调用toString()。这意味着:生成的输出是无用的。这意味着如果我在容器对象的数组中存储带有toString()的explicite实现的对象,我将不得不以非常具体和不方便的方式实现容器对象的toString():我必须编写代码来明确地创建一个容器对象中包含的任何对象数组的字符串表示形式。当然我可以这样做,但我会直观地假设一个toString()方法被自动调用,从而消除了对explicite实现的这种需求。

关于NodeJS,似乎在这个特定问题上查找信息并不容易。因此,如果您了解此主题,我们将不胜感激。问题是:创建数据模型(人类可读)字符串表示的最优雅方式是什么(=包含其他数据对象列表的数据容器对象)?

1 个答案:

答案 0 :(得分:11)

在Node.js中,console.log calls util.formatdoes not call toString()