4

次のコードがあります

var d = new Date();
Object.prototype.toString(d); //outputs  "[object Object]"
Object.prototype.toString.apply(d); //outputs "[object Date]"

この違いはなぜで、何が起こっているのでしょうか?

編集:

d.toString() // outputs "Tue Nov 06 2012 ..."

では、"[object Date]" の Date はどこから来ているのでしょうか。トリックを行うのはブラウザのネイティブコードですか?

4

3 に答える 3

4
Object.prototype.toString(d);

文字列に変換Object.prototypeし、その引数を無視します。の

Object.prototype.ToString.apply(d);

dthisがメソッドに渡されますToString(あたかも参照が呼び出されたかのようd.toString()に)。これは、メソッドが尊重するものです。toStringObject.prototype.toString

Function#applyて、Object#toString

于 2012-11-06T06:31:07.313 に答える
3

最初の呼び出しでは、パラメーターは無視されます。toStringオブジェクトでメソッドを呼び出していObject.prototypeます。基本的には次と同じです。

{}.toString(); //outputs  "[object Object]"

toString2 番目の呼び出しでは、メソッドを呼び出していますが、オブジェクトをそのコンテキストとしてObject適用しています。このメソッドは、代わりにオブジェクトの値を文字列として返すオブジェクトのメソッドDateと比較して、オブジェクトの型を文字列として返します。toStringDateDate

于 2012-11-06T06:37:21.247 に答える
1

別の説明は、Object.prototype.toStringがそのthisオブジェクトを操作することです。関数thisは、次のように呼び出す方法によって設定されます。

Object.prototype.toString();

toString関数はオブジェクトですthisObject.prototype次のように呼び出す場合:

Object.prototype.toString.apply(d);

これは、 (Date オブジェクト)thisによって参照されるオブジェクトです。d

于 2012-11-06T06:57:21.603 に答える