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)

toStringメソッド内で、thisを参照するようになりましたobj。これは同等です:

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