如题,demo如下
const obj = {
valueOf() {
return 'valueOf被调用了'
},
toString() {
return 'toString被调用了'
}
}
console.log(obj.toString()); // "toString被调用了"
console.log(Object.prototype.toString(obj)); // "[object Object]"
console.log(Object.prototype.toString.call(obj)); // "[object Object]"
在这个demo中,不加call调用也能获得预期结果。真的是很困扰,求大佬解答
你传一个数字就可以看到差别
这是 MDN 的描述:
Object.prototype 也是一个对象,Object.prototype.toString 调用的是 Object.prototype 这个对象的 toString 方法,所以永远是 "[object Object]"
而以 Object.prototype.toString.call 的形式调用,是调用 Object.prototype.toString 这个函数调用且函数内部的 this 执行 call 方法传递的第一个参数。
不同就在于 this 指向。