JavaScriptの継承について説明しているjohnresigの記事に出くわしました。 http://ejohn.org/blog/simple-javascript-inheritance/
この投稿には、開始行に正規表現があるクラス実装コードがあります
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
誰かがこれの意味を教えてもらえますか?
JavaScriptの継承について説明しているjohnresigの記事に出くわしました。 http://ejohn.org/blog/simple-javascript-inheritance/
この投稿には、開始行に正規表現があるクラス実装コードがあります
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
誰かがこれの意味を教えてもらえますか?
はfnTest、メソッドが_superどこかを使用しているかどうかを確認するために使用されます。これを行うために、関数は暗黙的に文字列(toString)に変換され、正規表現(in)に対してtest編集// Copy the properties over onto the new prototypeされます。
ただし、すべての実装が、toStringメソッドが呼び出されたときに関数のソースコードを実際に生成するわけではありません。したがって、このテストでは、function(){xyz;}を含むことに対してテストできるかどうかをチェックします。含まれxyzていない場合は、の代わりに常に一致する/.*/ものが使用され/\b_super\b/ます。
2つの正規表現があります。1つ目はちょうどです/xyz/。これは、関数(文字列に強制変換されたもの)がに一致するかどうかをテストするために使用されますxyz。します。次に、2つのregexenの1つが返されます(この場合、テストに合格したため、最初のregexen)。
それらの最初のものは単語の境界であり、_superその後に少なくとも、、およびに一致する可能性のある別の単語の境界が"_super"続き" _super "  ますword._super。
2番目は0個以上の文字(つまりすべて)に一致します。