0

JavaScriptの継承について説明しているjohnresigの記事に出くわしました。 http://ejohn.org/blog/simple-javascript-inheritance/

この投稿には、開始行に正規表現があるクラス実装コードがあります

fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;

誰かがこれの意味を教えてもらえますか?

4

2 に答える 2

3

fnTest、メソッドが_superどこかを使用しているかどうかを確認するために使用されます。これを行うために、関数は暗黙的に文字列(toString)に変換され、正規表現(in)に対してtest編集// Copy the properties over onto the new prototypeされます。

ただし、すべての実装が、toStringメソッドが呼び出されたときに関数のソースコードを実際に生成するわけではありません。したがって、このテストでは、function(){xyz;}を含むことに対してテストできるかどうかをチェックします。含まれxyzていない場合は、の代わりに常に一致する/.*/ものが使用され/\b_super\b/ます。

于 2013-02-12T17:09:32.053 に答える
1

2つの正規表現があります。1つ目はちょうどです/xyz/。これは、関数(文字列に強制変換されたもの)がに一致するかどうかをテストするために使用されますxyz。します。次に、2つのregexenの1つが返されます(この場合、テストに合格したため、最初のregexen)。

それらの最初のものは単語の境界であり、_superその後に少なくとも、、およびに一致する可能性のある別の単語の境界が"_super"続き" _super " ますword._super

2番目は0個以上の文字(つまりすべて)に一致します。

于 2013-02-12T17:05:17.057 に答える