var o = {
valueOf: function () {
return 1;
},
toString: function () {
return 'haha, intercepted';
}
};
如果我继续并且记录a
对象,那将意味着o.toString()
,(让我得到对象的字符串表示)意义,它将更早地找到该方法(在它自己的对象中)将记录haha, intercepted
。
console.log(o); // Object { toString: toString() }
但它会自动记录对象。无论如何管理找到正确的方法。那不一致是什么?
此外,如果我去执行添加操作,它将按照应用于对象valueOf
的{{1}}方法的方式工作。试图找到该对象的原始值,以便它可以添加1,但是我设法通过手动设置它来欺骗它。
o
答案 0 :(得分:0)
这是console.log()
的预期行为。当您传递一个对象时,它会打印出对象本身。它没有使用toString()
因为这会阻止它打印出它想要做的对象。您可以在MDN上详细了解其行为。
如果您想强制它使用toString()
,请将其o.toString()
传递给它:
var o = {
valueOf: function () {
return 1;
},
toString: function () {
return 'haha, intercepted';
}
};
console.log(o.toString());