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/