2

正在阅读 Underscore.js 以了解它的is[String|Number|...]方法是如何工作的,现在我很困惑。下划线:

toString.call(obj) == ['object ' + name + ']';

好的,所以,我可以

>>> toString.call('my string')
"[object String]"

>>> 'my string'.toString()
"my string"

我在这里迷路了!在第一个电话中,我得到了:

>>> document.toString === toString
true

>>> document.toString === 'asd'.toString
false

所以,我很困惑。我没想到会有这种行为。

4

1 回答 1

4

那是因为:

document.toString === Object.prototype.toString

它实现了最基本的版本toString,类似于:

'[object ' + (typeof this) + ']';

这与 非常不同String.toString(),后者仅输出字符串本身,即:

> String.prototype.toString.call('hello world')
"hello world"

或者Array.toString()它输出一个逗号分隔的值字符串。

> Array.prototype.toString.call([1,2,3])
"1,2,3"

使用.call()

为了完成这项工作,它们基本上toString()通过使用以下方式应用于对象.call()

toString.call(obj)

Inside the toString method, this now refers to obj. This would be equivalent:

Object.prototype.toString.call(obj)
于 2013-03-03T05:11:34.667 回答