0

これらは同等だと思いました。

var __Panel = {
 this.header = null;
};

var __Panel = function() {
 this.header = null;
};

最初のものは、コンパイラエラー "Expected identifier or string" に対してthis、および "Expected ','" に対してコンパイラエラーを返します;

誰かが私のためにこれを少し明確にすることができますか?

4

2 に答える 2

1

これは私にとって興味深いものでした:

js> var p = { this.header = null; };
js: "<stdin>", line 11: invalid property id
js: var p = { this.header = null; };
js: ..............^
js: "<stdin>", line 11: syntax error
js: var p = { this.header = null; };
js: ..............................^

これについてのプレオナスティックな説明は次のとおりです。

答えを提案するのは rhino です。this.headerテキストはプロパティ ID として解釈され、プロパティ ID としては有効ではありません。したがって、{ }はプロパティを「含む」オブジェクトであり、プロパティ名は のようにはなりませんthis.header。さらに進んで、「オブジェクト」の構文を確認できます。のように単純に見えます{ propertyId1 : value1, propertyId2 : value2, ...}

js> var p = { header:0, doit: function(){this.header=null;} };

これは受け入れられ、実際には「オブジェクト構文」が尊重されます。header整数 0 をdoit保持する と 関数を保持するの2 つのプロパティを持つオブジェクトを定義しました。

なぜ{this.header=null;}受け入れられたのか不思議に思うかもしれません。これは、オブジェクトの構文と、コードの「ブロック」を「区切る」ための の使用法を混同する必要がないためです{}。この場合は、関数自体、そのコードを「含みます」。それら{}は「むき出し」が{}表すものと同じものを表しているわけではなく、これはそれらの前に存在することによって明らかになりfunction()ます。

js> p.header;
0

これは、プロパティheaderが 0 を保持していることを示しています。これは単純で明白な事実です。

js> p.doit();

これにより、プロパティに保持されている関数が実行されますdoit。私たちはそれが起こることを期待しています?. この質問は、何であるかを尋ねることから派生しthisます。

js> p.header;
null

プロパティの内容を再度確認すると、headernull に変更されていることがわかります。これはthis、プロパティ内の関数で、プロパティdoitを「含む」オブジェクト、オブジェクト p 自体を参照することを意味します。

元の、削除された、コミュニティ wiki の投稿は次のとおりです。

これは私にとって興味深いものでした:

js> var p = { this.header = null; };
js: "<stdin>", line 11: invalid property id
js: var p = { this.header = null; };
js: ..............^
js: "<stdin>", line 11: syntax error
js: var p = { this.header = null; };
js: ..............................^
js> var p = { header:0, doit: function(){this.header=null;} };
js> p.header;
0
js> p.doit();
js> p.header;
null

元の投稿の終わり

これはすべて、パスを介して、暗黙的および暗黙的な方法で、おそらく別の方法で、コミュニティ Wiki モードがより多くの「話す例」 (実践による学習とエラーの解釈手法) で成長するのに役立つ可能性があるという質問に答えます。

しかし、それは「キャッチ」されず、明示的な「演繹的」手順が追加されました。

于 2012-05-14T21:28:39.253 に答える