14

マングースの情報源を読んでいます

Collection.prototype.onOpen = function () {
  var self = this;
  this.buffer = false;
  self.doQueue();
};

this作者がに割り当ててself実行する理由がわかりませんself.doQueue()。実行しない理由:

this.buffer = false;
this.doQueue();

私はjavascriptを初めて使用します、助けてくれてありがとう。

4

5 に答える 5

18

おっしゃる通り、この例では単にthis.

meorの使用は、 JavaScript 内での範囲がバリアントselfであるため、正しいコンテキストが使用されるようにするためのちょっとしたハックです。たとえば、イベントがクラス内の関数をトリガーする場合、それは異なり、関数を格納するオブジェクトではなく、関数を呼び出したオブジェクトになります。これを解決するために、実際のオブジェクトのように、または正しいオブジェクトを参照していることを確認するために、人々はよく使用します。thisthisthismeselfthis

于 2012-05-14T09:52:35.850 に答える
4

先に述べた@richardをより明確にするために、

Collection.prototype.onOpen = function () {
  var self = this;
  this.buffer = false;
  this.onclick = function(){
     //do some other operations here
     //if you refer `this` here then, `this` will refer to present function not the above. so to make sure it is referring to exact object people pass this to `me` or `self`   
     self.doQueue();
  } 
 };
于 2012-05-14T10:03:57.250 に答える
2

通常これを行う唯一の理由は、への呼び出しが別の関数などdoQueue()の値を変更するブロック内にある場合です。this

ただし、この場合は何の役にも立たず、元に戻されていない古いコードの名残りである可能性があります。

于 2012-05-14T09:54:04.120 に答える
2

ほとんどの場合、開発者は一貫性を望んでいましたが、そうできませんでした

それ以外の場合は、オブジェクトを使用する場所とネストされた関数/コールバックを使用するかどうかに応じてthis、一部の関数、self他の関数、および他の関数の両方の組み合わせで使用します。

常に後者に割り当てthisてからself使用することにより、各関数の最初に追加の割り当てが1つありますが、オブジェクトへのアクセスには常に使用します。self

ただし、投稿したコードで開発者が行ったことはあまり意味がありません。彼は、必要でさえないミックスの代わりに、selfまたは両方の時間を使用する必要があります。this

于 2012-05-14T09:54:56.457 に答える
-2

self は「this」のコピーですが、常に正しいオブジェクトを参照しており、「this」はそうでない可能性があります。

于 2012-05-14T09:53:08.377 に答える