我正在使用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方法,但它仍然没有产生任何影响。有人可以解释这段代码有什么问题吗?
答案 0 :(得分:1)
有趣。 Chrome ignores toString()
输出console.log()
方法。
如果你改为alert(ray)
,你会看到“我的名字是Ray,而我是loooove 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