柔軟な関数を作成
それは限られているように見えるかもしれませんが、議論は非常に有用なオブジェクトです。たとえば、さまざまな数の引数を受け入れる機能を作成できます。 Dean EdwardsによってBase2ライブラリにある形式関数は、この柔軟性を示しています:
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]; }); };
気づいたかもしれないことの1つは、形式の関数定義では、1つの引数のみを指定したことです:文字列。 JavaScriptを使用すると、関数定義に関係なく、任意の数の引数を関数に渡すことができ、引数オブジェクトはすべてにアクセスできます。
実際の配列に変換しますformat("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
引数は実際のJavaScriptアレイではありませんが、標準配列メソッドを使用して簡単に1つに変換できます。
変数ARGSには、引数オブジェクトからのすべての値を含む適切なJavaScriptアレイオブジェクトが含まれます。
引数オブジェクトにより、あらゆる種類のJavaScriptトリックを実行できます。 MakeFunc関数の定義は次のとおりです。この関数を使用すると、関数参照とその関数の任意の数の引数を提供できます。指定した関数を呼び出す匿名関数を返し、匿名関数が呼び出されたときに提供された新しい引数と一緒にプリセット引数を提供します。
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]; }); };
最初のApplyの引数は、関数が呼び出されるスコープを指します。基本的に、これが呼び出される関数内で言及するキーワード。今のところ少し前進しているので、nullを維持します。 2番目の引数は、関数の引数オブジェクトに変換される値の配列です。 MakeFuncは、匿名関数に提供された引数の配列に元の値の配列を連結し、これを呼び出された関数に提供します。
テンプレートが常に同じである場所で出力するために必要なメッセージがあったとしましょう。フォーマット関数を呼び出すたびに常にテンプレートを引用する必要がないようにするために、makefuncユーティリティ関数を使用して、フォーマットを呼び出してテンプレート引数を自動的に入力する関数を返すことができます:
このように繰り返しmajortom関数を呼び出すことができます:
format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
Majortom関数を呼び出すたびに、最初の引数でフォーマット関数を呼び出します。テンプレートはすでに記入されています。
var args = Array.prototype.slice.call(arguments);
それはかなりクールだと思うかもしれませんが、待ってください、議論にはもう一つの驚きがあります。別の有用なプロパティがあります:Callee。 arguments.calleeには、引数オブジェクトを作成した関数への参照が含まれています。どうすればそのようなものを使用できますか? arguments.calleeは、匿名関数がそれ自体を参照できる便利な方法です。
function makeFunc() { var args = Array.prototype.slice.call(arguments); var func = args.shift(); return function() { return func.apply(null, args.concat(Array.prototype.slice.call(arguments))); }; }
ただし、その関数の特別なバージョンを作成し、毎回2秒の遅延で3回繰り返されます。繰り返し機能を使用すると、これを行うことができます:
var majorTom = makeFunc(format, "This is Major Tom to ground control. I'm %1.");
majorTom("stepping through the door"); majorTom("floating in a most peculiar way");
"This is Major Tom to ground control. I'm stepping through the door." "This is Major Tom to ground control. I'm floating in a most peculiar way."
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]; }); };
「引数」オブジェクトは、JavaScriptのすべての非矢印関数内で利用可能なローカル変数です。これには、関数に渡されたすべての引数があるアレイのような構造が含まれています。このオブジェクトは、関数がさまざまな数の引数を処理する必要がある場合に役立ちます。 「引数」オブジェクトは実際の配列ではありませんが、必要に応じて1つに変換できることに注意することが重要です。
アレイのように動作しますが、アレイプロトタイプから継承することはできません。ただし、array.from()メソッドまたはスプレッド演算子(…)を使用して、それを配列に変換できます。例は次のとおりです。
function convertargstoarray(){
var argsarray = array.from(arguments);
//または
var argsarray = [... arguments];
}}
関数checkargstype(){
for(var i = 0; i}
}「引数」オブジェクトの「Callee」プロパティは何ですか?このプロパティは非推奨であり、新しいコードでは使用しないでください。代わりに、名前付き関数式または矢印関数を使用できます。
以上が引数:JavaScriptの奇妙さの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。