2

我在underscore.js中看到了这段代码。

在这里,应用了别名:

toString = ObjProto.toString,

但是,要使用 toString ,它也可以像这样直接访问,完全不用上面的代码。

toString()

在控制台中尝试它工作正常。在直接代码中尝试一下,它也可以正常工作。我的猜测是,较旧的浏览器可能无法以这种方式访问​​它。

我该如何进一步调查?

Caniuse没有这方面的信息。

谷歌在前 10 次左右的点击中没有找到任何有用的信息。

因为它是 on Object.prototype,所以它可以被继承自 Object 的全局对象访问(只有那些继承的,而不是所有全局对象),例如 Number。

但我的观点是,它也可以直接访问,而无需使用全局对象实例。

toString(some_var);

这是一个SO Q/A,它表明并非所有浏览器都支持 window.toString 以及为什么会这样。

4

1 回答 1

6

从 Object 继承的全局对象,

这是一个错误的假设,全局对象是宿主对象,它们可以从他们想要的任何东西继承或根本不继承任何东西。例如代码在 IE10 中不起作用。

存储的特定 toString方法Object.prototype是唯一肯定返回内部类名的方法。函数、数组、数字等不继承Object.prototype toString方法,而是定义自己 toString方法,如Number.prototype.toString !== Object.prototype.toString.

于 2013-07-21T15:03:48.973 回答