0

私はCoffeescriptの出力を研究して、舞台裏で何が起こっているのかをしっかりと理解しようとしています。新しいクラスPersonを宣言すると、IIFEを含むPersonという名前の変数が作成されます。

var Person;

Person = (function() {
  function Person() {
    this.doThing();
  }

  Person.prototype.doThing = function() {};

  return Person;

})();

ここで私を驚かせているのは、IIFE自体にPersonという名前の関数宣言が含まれていることです。これは元のPerson変数を上書きしますか、それともJavascriptはこれを新しいスコープと見なしますか?PersonのプロトタイプにdoThingが追加された場合、具体的に参照しているオブジェクトはどれですか?

おそらく私の質問はより深い混乱を裏切っています:)

4

1 に答える 1

2

関数であるIIFEは、すべての'class'ロジックが適切に隠されるように、新しいスコープを作成します。IIFEのPerson内側が返され、その外側に割り当てられPersonますが、IIFEが何か他のものを返した場合、それが外側Personになります。

doThingPerson内部のプロトタイプに割り当てられていますが、Personが返されるため、IIFE内の同じ関数オブジェクト参照です。

于 2013-02-17T03:53:31.093 に答える