【问题标题】:JavaScript: toStringJavaScript: toString
【发布时间】:2010-09-08 15:44:15
【问题描述】:

Object.prototype.toString === toString 怎么来的?如果我在全局范围内有这个:

var toStringValue = toString.call("foobaz");

我希望toStringValuewindow.toString 的值,因为window 是默认范围,对吧?为什么toString 本身会解析为Object.prototype.toString 而不是window.toString

【问题讨论】:

    标签: javascript scope window tostring


    【解决方案1】:

    您将获得的结果将取决于主机环境。如果我运行这个:

    alert(toString === window.toString);
    alert(toString === Object.prototype.toString);​
    

    ...在 Chrome 上,我分别得到 truefalse;在 Firefox 上,我得到 falsefalse。 IE 给出truefalse 见下文。

    浏览器上的 window 对象有点棘手,因为它是一个宿主对象,宿主对象可以根据需要做一些奇怪的事情。 :-) 例如,您的 toString.call("foobaz") 在 IE 上会失败,因为 windowtoString 不是真正的 JavaScript 函数,并且没有 callapply。 (我不是说那样做是对的,你懂的……)

    【讨论】:

    • 这就是框架倾向于在本地缓存Object.prototype.toString的原因吗?
    • @Jeremy:不,他们这样做只是为了节省一直查找它的时间(Object.prototype.toString 是两个属性查找,并且可能是一堆范围遍历/查找);将值抓取到本地可以更快,更简洁)。他们想要一个方便的参考,因为Object.prototype.toString 是找出对象是什么的方法之一。详情:blog.niftysnippets.org/2010/09/say-what.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多