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/