mqyqingfeng / Blog

冴羽写博客的地方,预计写四个系列:JavaScript深入系列、JavaScript专题系列、ES6系列、React系列。
30.77k stars 4.71k forks source link

关于 Object.prototype.toString 的讨论 #196

Open jxccc1998 opened 3 years ago

jxccc1998 commented 3 years ago

@Tan90Qian 厉害了,我也才发现,原来:

Object.prototype.toString.call(location)
// "[object Location]"
Object.prototype.toString.call(history)
// "[object History]"

而且他们跟自身相等是因为引用是相同的吧,就像:

var obj = {};
console.log(obj === obj) // true

Originally posted by @mqyqingfeng in https://github.com/mqyqingfeng/Blog/issues/28#issuecomment-381464362

jxccc1998 commented 3 years ago

请问既然Object.prototype.toString.call(window)会得到window,为什么全局直接执行Object.prototype.toString()不返回window

xixizhangfe commented 3 years ago

请问既然Object.prototype.toString.call(window)会得到window,为什么全局直接执行Object.prototype.toString()不返回window

Object.prototype.toString.call(window)实际会调用window[Symbol.toStringTag]。 window[Symbol.toStringTag] // Window

jxccc1998 commented 3 years ago

那如果window.Object.prototype.toString(),执行方法中的this是指向Object,为啥不是window

huangpingcode commented 3 years ago

请问既然Object.prototype.toString.call(window)会得到window,为什么全局直接执行Object.prototype.toString()不返回window

因为不是window调用toString,注意this指向,a.b.c.funfun的this是c,不是a