言語デザインの観点からこれをお願いしています。だから私は見つけようとしています
- の振る舞いの理論的根拠は何
thisですか? - の振る舞いはどの程度
this間違いでしたか、または改善することができましたか?
不安な理由を明確にするためにthis、次の例を検討してください。
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
所属するオブジェクトが簡単にf()失われることに注意してください。から分離すると、グローバルオブジェクトaになります(ブラウザの場合)。thiswindow
今考えてみましょう:
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でしょうか。