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個以上の文字(つまりすべて)に一致します。