これ!=これはjavascriptで(まあ、ときどき....)

例1

var Reptile = function() {
  var reptile = this;
   this.showBla = function() {
       alert(reptile.bla);
   }
}

var turtle = new Reptile();
turtle.bla = 'whatever';
turtle.showBla();

例2

var Reptile = function() {
   this.showBla = function() {
       alert(this.bla);
   }
}

var turtle = new Reptile();
turtle.bla = 'whatever';
turtle.showBla();

Is 例1 legit? As it sometimes seems to screw things over to define "this" directly in the constructor...?!?

2
よく見えます。あなたはコンストラクタで何も定義していないので、単に参照を格納します。全く問題無い。
追加された 著者 jAndy,
this を自分で定義することはできません。常に利用可能であり、上書きすることはできません。
追加された 著者 pimvdb,
どちらの例も耐え難い妥当性があるので、時には物事をねじ込むコードを提供できますか?
追加された 著者 Esailija,

2 答え

はい、正当なものであり、そこに呼び出される関数の中で関数を定義する必要がある場合に便利です。 "this"は他のものへのポインタです。書籍にはこの変数の名前を付けることをお勧めします。var = this;

3
追加された

例1は、現在のインスタンスへの参照を維持するための一般的なパターンです。コールバックの状況では、次のようになります。

setTimeout(turtle.showBla, 0);

例1の var reptile ...this 参照を保存し、 '何でも' を表示します。例2では、​​呼び出し側(たとえばjQueryなど)でスコープを手動で割り当てない限り、 undefined が表示されます。

setTimeout($.proxy(turtle.showBla, turtle), 0);
1
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript