我正在尝试使用 toString 方法,当我尝试覆盖函数的 toString 方法时,我可以在尝试使用 console.log-ging 时看到效果。 http://jsbin.com/bigocijuqo/1/edit?js,console .
function greet(){
console.log("Hello!");
}
console.log(greet);
greet.toString = function () {
return "Overridden toString";
};
console.log(greet);
产生
function greet(){
window.runnerWindow.proxyConsole.log("Hello!");
}
Overridden toString
但是,当我对对象进行同样的尝试时,它似乎并没有生效。 http://jsbin.com/jebunakibi/1/edit?js,console
var ray = {
'name': 'Ray',
'fav_food': 'Carrots'
};
console.log(ray);
ray.toString = function () {
return "My name is " + this.name + " and I loooove " + this.fav_food;
};
console.log(ray);
产生
[object Object] {
fav_food: "Carrots",
name: "Ray"
}
[object Object] {
fav_food: "Carrots",
name: "Ray",
toString: function () {
return "My name is " + this.name + " and I loooove " + this.fav_food;
}
}
我预计第二个 console.log 会打印
My name is Ray and I loooove Carrots
我什至尝试更改 Object.prototype 中的 toString 方法,但它仍然没有任何效果。有人可以解释这段代码有什么问题吗?
最佳答案
很有趣。 Chrome ignores console.log()
输出中的 toString()
方法。
如果您改为执行 alert(ray)
,您会看到“我的名字是 Ray,我喜欢 Carrots。”
要在控制台中看到相同的内容,请执行以下操作:
console.log(ray.toString());
……或者这个:
console.log(ray + '');
您可以为此创建一个新的 console
函数:
console.say= function(s) {
console.log(s + '');
}
示例:
console.say= function(s) {
console.log(s + '');
}
var ray = {
'name': 'Ray',
'fav_food': 'Carrots'
};
ray.toString = function () {
return "My name is " + this.name + " and I loooove " + this.fav_food;
};
console.say(ray); //My name is Ray and I loooove Carrots
关于javascript - 在javascript中覆盖对象的toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30061217/