最近、John Resig による inherit.jsという小さなユーティリティ ライブラリを使用しました。私は通常、使用しているライブラリのコア部分を理解しようとしますが、頭を悩ませた後、コードの難しい部分 (つまり、スーパークラスの対応するメソッドを呼び出す方法) を最終的に理解しました。
取得できない 1% ビットは、正規表現に関連しています
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
- 正規表現 /xyz/ は関数に対してテストされます。文字列を引数として取るMSDNとMDN状態の両方。
test
機能についての言及はありませんが、コンソールにエラーがないので、おそらく飛ぶに違いないと思いますが、どのように機能しますか? - 次の WTF は、関数本体が
xyz;
. この関数は実行できません。そうしないと "ReferenceError: xyz is not defined
" になるからです。右?それで、それは何をしますか? - テストの結果が true の場合は、単語境界
fnTest
をチェックする正規表現に等しく_super
、それ以外の場合は何にでも一致する正規表現になります。ダブルWTF; 繰り返しますが、どのように、なぜですか。
後で、この正規表現が使用されている関連するコードがあります。
// Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name])
? aFunctionThatCanCallSuper /* Lots of code */
: prop[name];
ここで私が疑問に思っているのは、fnTest.test(prop[name])
. プロパティが存在するかどうか、関数であるかどうかなどをチェックする他のすべてのテストは理解していますが、正規表現テストの機能は理解していません。誰?