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

Javascript 如何覆盖对象的默认输出?,javascript,oop,Javascript,Oop,假设在JavaScript中我创建了一个简单的对象: function MyObj() { this.prop = "property"; } 现在,如果我创建一个实例并将其输出到控制台,我会看到对象表示: var obj = new MyObj(); console.log(obj); 如何将该输出改为字符串?:例如,我希望控制台显示我的属性值为“property”而不是[object] 我尝试过使用MyObj.prototype.toString,但它似乎不起作用。MyObj.p

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

function MyObj() {
    this.prop = "property";
}
现在,如果我创建一个实例并将其输出到控制台,我会看到对象表示:

var obj = new MyObj();
console.log(obj);
如何将该输出改为字符串?:例如,我希望控制台显示
我的属性值为“property”
而不是[object]


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

MyObj.prototype.toString()=function(){}
会起作用,但不会输出到控制台。如果你这样做

console.log("The object says: " + obj);
。。。您将看到
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);

在日志调用中没有显式字符串的情况下,有什么方法可以实现这一点吗?@shannethat如果您只想在日志中转储它,您可以调用
obj.toString()
我不知道如何修改控制台的行为来调用
toString()
而不是丢弃对象的内容。这实际上是一个面试问题,我认为这可能是故意的转移注意力。要求是
console.log(obj)
将输出一个自定义字符串,但如果不可能,那就是我的答案。@Shan我没有说不可能,我说我不知道怎么做。顺便说一句,对于未来的面试或任务问题,请在我们开始回答之前告知我们。我们通常可以猜测这是否是一个直接的家庭作业问题,并采取一些不同的方法来帮助和回答。就你而言,你已经走上了正确的道路,所以我很乐意帮助你,先生,这对我来说已经足够了。
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);