ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で引数を使用して string.format 関数を実装する
以下は、ソース コードの抜粋と、彼の設計と実装のアイデアの詳細な分析です:
コードは次のとおりです:
function format(string) { var args=arguments; var pattern=new RegExp("%([1-" + arguments.length + "])", "g"); return String(string).replace(pattern, function(match, index) { return args[index]; }); };
format 関数を介して、次のコードが生成されます:
コードは次のとおりです:次のように:
format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
「そして新聞はあなたが誰のシャツを着ているかを知りたがっています。」と返されます。
確かに、これは C# でパラメータを渡して string.format 関数を呼び出すのと少し似ています。
一般的に、技術的な内容は本当にないようです。しかし、本当に技術的な内容はないのでしょうか? Lou Zhu は、JavaScript と引数に関する表面的な知識と理解に基づいてこのプログラムを分析します。
1. 正規表現
は、1 から 1 までの引数の数に一致する % で始まる新しい正規パターンを非常に巧妙に作成しました。以下のポイント 2 の文字列置換の重要な前提条件
2. 文字列の置換関数
置換関数の 2 番目のパラメータは、非常に「驚くべきこと」です。定義上、変数 args は実際には引数であり、args[index] を通じてインデックス パラメーターを取得できます。また、index>=1 および Index
この関数は非常に短く簡潔で、強力な関数とは大きなコントラストを形成しており、驚くべきことです。
Lou Zhu のように C# に甘やかされて、C# での string.format の書き方に執着する開発者も多いかもしれません (そのほとんどは使用習慣が原因ですよね)。Lou Zhu が少し変わったのは良かったですね。ソースコード:
コード 次のように:
function format(string) { var args=arguments; var pattern=new RegExp("{([0-" + arguments.length + "])}", "g"); return String(string).replace(pattern, function(match, index) { var currentIndex=parseInt(index); if (currentIndex + 1 > args.length || currentIndex < 0) { throw new Error("参数索引出错"); } return args[currentIndex + 1]; }); }; document.write(format("And the {0} want to know whose {1} you {2}", "papers", "shirt", "wear"));//大括号,索引从0开始...
このように、C# の書き方と同じように format 関数を呼び出すことができるように見えます。
私がこの記事の執筆を最後にチェックしたのは 2008 年でした。2008 年、Lou Zhu はかなり啓発されていました。彼は JavaScript の学習に熱心に取り組んでいましたが、引数の理解はまだ非常に未熟でした。ただし、JavaScript が使用できることはすでに知っていました。カスタムイベントではこれを使ってcreateFunction関数を定義したり、createFunction関数を使ってイベントで使うパラメータのない関数を構築したりしていましたが、当時は「形だけは知っていて実態は分からない」といつも落ち込んでいました。アンドリューの傑作を読んだ後、私は突然啓発されたように感じました。私の反応は遅く、後で気づきましたが、それでも非常にインスピレーションと満足感を感じました。