質問を理解できるかどうかはわかりませんが、役立つ説明があります。
プレーンなJavaScript(つまり、ECMAScript)では、関数がnew
演算子で呼び出されると、コンストラクターのパブリックオブジェクトに内部セットthis
されているかのように作成された新しいオブジェクトを参照します。new Object()
[[Prototype]]
prototype
return this
代わりに他のオブジェクトが返されない限り、返されるのはその新しいオブジェクトです(これは、デフォルトのアクションである必要はありません)。
関数が呼び出されると、その関数はthis
呼び出しによって完全に設定され、コンテキスト(つまりスコープ)は関係ありません。
それで:
function Moo() {
// if called with new, this references a new object
}
// Assign a new object to Moo.prototype,
// replacing the default object given to all functions
Moo.prototype = {
someMethod: function() {...},
...
}
// Create an instance of Moo
var moo = new Moo();
// Call a method
moo.someMethod();
最後の行では、this
withinはオブジェクトsomeMethod
を参照しmoo
ますが、これはメソッドがどのように呼び出されたかに完全に基づいており、メソッドがどのようmoo
に構築されたか、または呼び出されたコンテキストとは関係ありません。
たとえば、someMethod
次のように呼び出された場合:
var x = moo.someMethod;
x();
の値はthis
設定されていないため、someMethod
デフォルトでグローバル(ウィンドウ)オブジェクトに設定されるか、厳密モードでは未定義になります。
上記は、呼び出しのコンテキストに関係なく発生し、this
動的であり、呼び出しによって完全に設定されることに注意してください(ES5バインドを無視します)。