Javascript 如何覆盖对象的默认输出?
假设在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
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);