言語デザインの観点からこれをお願いしています。だから私は見つけようとしています
- の振る舞いの理論的根拠は何
this
ですか? - の振る舞いはどの程度
this
間違いでしたか、または改善することができましたか?
不安な理由を明確にするためにthis
、次の例を検討してください。
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
所属するオブジェクトが簡単にf()
失われることに注意してください。から分離すると、グローバルオブジェクトa
になります(ブラウザの場合)。this
window
今考えてみましょう:
var newA = function(){
var self = {};
self.f = function(){ return self; }
return self;
}
var a = newA();
var f = a.f;
// f() == a.f() !
まったく使用せthis
ずに、メソッドがどこでどのように使用されているかに関係なく、オブジェクトコンテキストを確立して維持することができます。クロージャーが提供する力で、this
余計になり、おそらく少しでも危険になると思わずにはいられません...
私は、に反対this
したり、議論を始めようとしているわけではありません。私は単にそれをよりよく理解しようとしているだけです。「これ」が役立つことはありがたいですが、それも混乱を招く可能性があることを認識してください...確かに初心者にとって、そしておそらく専門家にとっても、十分にあいまいな場合には混乱します。
それでも、言語の他のコアな側面が忌避のための公正なゲームであるように見える時代に、それは言語の頻繁に使用され、一見尊敬されている部分のままです(すなわち、Crockfordおよびwith
またはnew
)。それでは何が欠けているのthis
でしょうか。