javascript - 在javascript中覆盖对象的toString

标签 javascript google-chrome prototypal-inheritance

我正在尝试使用 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/

相关文章:

javascript - 在 Ember 中,使用选择标签停止点击事件传播的最佳方法是什么

javascript - 将对应于另一个数组的数组的值求和

javascript - 为什么按空格键时不显示警报?

javascript - 为什么我不能通过 Object.defineProperties() 在原型(prototype)上定义属性或函数?

javascript - 为什么函数响应 .prototype 但常规对象不响应?

javascript - AngularJS - 使用 $routeProvider :resolve 拒绝了 $http promise

javascript - 需要在组合框中填充国家列表和各自的州列表

google-chrome - 谷歌浏览器和网站图标

css - 嵌套的 flex 盒在不同浏览器中的工作方式不同

javascript - 将格式添加到 native 日期解析器