ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptの組み込みオブジェクト引数の詳しい説明

JavaScriptの組み込みオブジェクト引数の詳しい説明

高洛峰
高洛峰オリジナル
2016-12-14 09:03:311556ブラウズ

1. 引数とは JavaScript の組み込みオブジェクトです。これは奇妙で見過ごされがちですが、実際には非常に重要です。すべての主要な JavaScript ライブラリは、arguments オブジェクトを利用します。したがって、agruments オブジェクトは JavaScript プログラマにとって馴染みのあるものでなければなりません。
すべての関数には、関数によって呼び出されるパラメータを含む独自の引数オブ​​ジェクトがあります。 typeof 引数が使用されている場合は、「object」が返されます。ただし、データを呼び出すメソッドを使用して引数を呼び出すことはできます。たとえば、長さとインデックスのメソッドです。ただし、配列のプッシュおよびポップ オブジェクトは適用できません。
2. 柔軟な関数を作成する
引数オブジェクトは用途が非常に限られているように見えますが、実際には非常に便利なオブジェクトです。引数オブジェクトを使用すると、可変数の引数を使用して関数を呼び出すことができます。 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」から「%9」を使用して戻り値にプレースホルダーを追加できます。次に、他の 9 つのパラメータが挿入用に提供されます。

format(“And the %1 want to know whose %2 you %3″, ”papers”, ”shirt”, ”wear”);

上記のコードは次のように返されます: そして、新聞はあなたが誰のシャツを着ているかを知りたがっています。関数の定義に関係なく、任意の数のパラメーターを関数に含めることができます。

3. 引数オブジェクトを実際の配列に変換します。
引数オブジェクトは実際の JavaScript 配列ではありませんが、それでも可能です。それを簡単に標準データに変換し、配列操作を実行します。
それから、関数
Arguments オブジェクトをすべて含む関数のパラメータが含まれます。引数オブジェクトを使用すると、すべてのタイプの JavaScript メソッドを実行できます。ここに makeFunc 関数の定義を添付すると、関数の参照とその関数のすべてのパラメータを指定できます。指定する。匿名関数呼び出しに付随するパラメータを提供します。

var args = Array.prototype.slice.call(arguments);

最初の引数オブ​​ジェクトは、呼び出したい関数への参照を提供し、引数配列から削除され、指定された関数を返します。
最初に適用された引数は関数呼び出しのスコープを指し、最初は null として保持され、makeFunc は元の配列値を引数に連結します。
テンプレートを参照するたびに呼び出す必要がないように、テンプレートを同じ位置に出力する必要があります。一般的な関数を使用できます。 makeFunc を使用して、format を呼び出してテンプレートを自動的に完成させる関数を返します。

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)));   
  };   
}

次のように、majorTom 関数を呼び出すことができます。

var majorTom = makeFunc(format, ”This is Major Tom to ground control. I'm %1.”);

MajorTom を呼び出すたびに、format 関数が呼び出され、最初の引数は5. それ自体を参照する関数を作成します

これは素晴らしいと思われるかもしれませんが、引数には他にも驚くべき機能があります: callee メソッドには参照が含まれています。では、それをどのように使用するのでしょうか? Arguments.callee メソッドを使用すると、匿名関数がそれ自体を簡単に指すことができます。

Repeat は、関数参照と 2 つの数値を運ぶ関数です。最初の数値は関数が呼び出される回数で、2 番目の数値は各呼び出し間の時間 (ミリ秒単位) です。

majorTom(“stepping through the door”);   
majorTom(“floating in a most peculiar way”);

Repeat 関数は、arguments.callee メソッドを使用して変数 self から参照を取得し、元の命令を実行した関数を指します。このようにして、匿名関数は自分自身を再度呼び出すことができます。

文字列を渡してアラートメソッドを実行する非常に単純な関数があります。

“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.”

ただし、このアクションを 2 秒間隔で 3 回繰り返すことができる特別なバージョンを作成したいと思います。次に、 somethingWrong 関数を
function repeat(fn, times, delay) {   
  return function() {   
    if(times– > 0) {   
      fn.apply(null, arguments);   
      var args = Array.prototype.slice.call(arguments);   
      var self = arguments.callee;   
      setTimeout(function(){self.apply(null,args)}, delay);   
    }   
  };   
}

呼び出します。その結果、各アラートの間に 2 秒の間隔を置いて、このアクションが 3 回繰り返されます。

Arguments はあまり使用されず、少し奇妙ですが、驚きに満ちており、理解する価値があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。