如何覆盖对象的默认输出?

sha*_*hat 2 javascript oop

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

function MyObj() {
    this.prop = "property";
}
Run Code Online (Sandbox Code Playgroud)

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

var obj = new MyObj();
console.log(obj);
Run Code Online (Sandbox Code Playgroud)

我怎样才能使输出成为字符串?:例如,我希望控制台显示My property value is 'property'而不是[对象对象].

我尝试过使用MyObj.prototype.toString,但它似乎没有用.

Joe*_*erg 5

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

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);
Run Code Online (Sandbox Code Playgroud)