JavaScript では、私が持っている場合:
var foo = function(){}
foo.prototype.bar = function() {
console.log(this);
}
baz = new foo();
baz.name = 'baz';
bing = new foo();
bing.name = 'bing';
baz.bar();
bing.bar();
setTimeout(baz.bar);
setTimeout(bing.bar);
私のコンソールではbaz、、、、オブジェクトbingがこの順序でログに記録されています。windowwindow
見るために必要な最も単純な、または「通常の」トリックは次のとおりです。
baz, bing, baz,のプロトタイプの関数bing内で「このような」変数を使用してログに記録されます。barfoo
「このような」とはbar()、オブジェクトにアクセスするために内部で使用できる変数のことであり、現在と将来の両方のメソッドです。
編集:
さらに明確にするために、 bar() をいつ呼び出すかを知る必要がないようにしたいと思いthisますbind()。私がbar()baz や bing を呼び出しているとき、それは「ブラック ボックス」であると仮定します。bar() を bing または baz のメソッドとして、それがどのように機能するかを知らずに呼び出したいと思います。また、bar() の内部で、それがどのオブジェクトのメソッドであるかを認識したいと考えています。