如何覆盖对象的默认输出

How do I override the default output of an object?

本文关键字:对象 默认 输出 覆盖 何覆盖      更新时间:2023-09-26

假设我在JavaScript中创建了一个简单的对象:

function MyObj() {
    this.prop = "property";
}

现在,如果我创建一个实例并将其输出到控制台,我会看到对象表示:

var obj = new MyObj();
console.log(obj);

如何将该输出改为字符串?:例如,我希望控制台显示My property value is 'property',而不是[对象对象]。

我试过使用MyObj.prototype.toString,但似乎不起作用。

您可以挂接浏览器控制台,然后重新定义它:

var obj = {
    name: "Joel",
    age: 32,
    toString: function() {
        return this.name + " is " + this.age + " years old.";
    }
};
var browserConsole = console;
console = {
    log: function(data) {
        if (typeof data === "object") {
            browserConsole.log(data.toString());
        } else {
            browserConsole.log(data);
        }
    }
}
console.log(obj);

MyObj.prototype.toString() = function() {}将工作,但不会输出到控制台。如果你做了类似的事情

console.log("The object says: " + obj);

您将看到toString() 的输出

function MyObj() {
    this.prop = "property";
}
MyObj.prototype.toString = function() {
   return "My property 'prop' has the value: '" + this.prop + "'";
}
var obj = new MyObj();
console.log("the object says: " + obj);
// the object says: My property 'prop' has the value: 'property'
// Or call toString() explicitly
console.log(obj.toString());
// My property 'prop' has the value: 'property'