0

次のコードでは、

var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

呼び出しでは、現在のオブジェクトは ( toString.call(new Date)) のように渡されますが、受信側 ではキーワードvar toString = Object.prototype.toString;を使用する代わりにthisキーワードを使用してObjectいますが、それでも正しい答えが得られました。私はこの概念を理解していませんでした。誰もがこの概念を理解するのに役立ちます

4

3 に答える 3

3

.call提供されたコンテキストで関数を実行します。の関数を変数にvar toString = Object.prototype.toString渡しObjectますtoString..簡単にアクセスできると思います。

toString.call([new context here])次に、提供されたコンテキストでオブジェクトのtoStringメソッドを呼び出すために使用できます。ご覧のとおり、これ[object OBJECTNAME]は文字列として出力されます。

ObjecttoStringは他とは異なります。例えば:

(new Date).toString(); // "Tue Feb 26 2013 01:00:17 GMT-0500 (EST)"
(new String).toString(); // ''
于 2013-02-26T06:00:22.617 に答える
1

thisまず、関数の呼び出し方法に応じて値がどのように変化するかを理解する必要があります。

まず、メンバー機能があります。Object.prototype.toStringのメンバー関数ですObject.prototype。これは次のように簡単に視覚化できます。

Object.prototype = {
    toString: function() {} // is responsible for converting an object to it's string representation
};

メンバー関数が呼び出されると、のコンテキストはthis親オブジェクト(のインスタンスObject)を参照します。組み込みのJSオブジェクトが拡張Objectされると、それらはすべて.toString()さまざまな結果で使用できます。

(new Object).toString(); // [object Object]
(new String).toString(); // [object String]

それはの内部の仕組みを想像するのに役立ちます.toString()、あなたはそれが次のようなことをするかもしれないと想像するでしょう:

// ..
return '[object '+ this.constructor.name + ']';
// ..

this関数内のの値を変更すると、検査対象のオブジェクトがどのように変更されるかを想像できるといいのですが。

.call()を介して呼び出すObject.prototype.toStringと、次のように使用される新しい値を渡すことができますthis

Object.prototype.toString.call(new Date); // [object Date]

this関数を呼び出すときにの値に影響を与える3つの方法についてのYehudaKatzの簡単な説明を読むことを強くお勧めします。

http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/

于 2013-02-26T06:04:35.457 に答える
1

あなたの質問を理解しているかどうかわかりません。しかし、ここに行きます。

var toString = Object.prototype.toString;

この行では、オブジェクトの「prototype」プロパティを読み取り、プロトタイプの「toString」プロパティを読み取ります。toString プロパティは関数です。これを変数に格納しました。

これを行うtoString.call(new Date);と、上記の関数を取得して、「new Date」によって返されるオブジェクトに適用します (つまり、thistoString 内のコードのコンテキストは、「new Date」によって返されるオブジェクトになります)。

これは、オブジェクトに属するメソッドをコピーして別のオブジェクトに適用することと考えることができます。

于 2013-02-26T06:02:29.677 に答える