javascript内蔵オブジェクトargments詳細


一、何がargmentsarggmentsですか?JavaScriptの中の一つの内蔵の対象で、それはとても風変わりで、いつも人に無視されて、しかし実際にはとても重要です。すべての主要なjs関数ライブラリはargmentsオブジェクトを利用しています。したがって、ギルメントスオブジェクトはjavascriptプログラマにとってはなじみが必要です。すべての関数は自分のargmentsオブジェクトに属しています。手紙で呼び出すパラメータが含まれています。彼は配列ではありません。typeof argmentsを使えば、戻ってくるのは「object」です。データを呼び出す方法でアルグメンントを呼び出すことができますが。例えばlength、index方法があります。しかし、配列のpushとpopオブジェクトは適用されません。二、柔軟な関数を作るということは、argmentオブジェクトとしては限られているように見えますが、実際には非常に有用なオブジェクトです。argmentオブジェクトを使うことで、関数に数の不定なパラメータを呼び出すことができます。Dean Edwardsのbase 2庫にフォーマットの関数があり、この柔軟性を示しています。
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”);
上のコードは戻ってきます。And the papers want to know whose shirt you wear。一つのことに注意したいのですが、関数を定義する時は一つのパラメータだけを規定しました。Javascriptは、どのように関数を定義しても、任意の数のパラメータを一つの関数に伝達することができます。これらはAgmentsオブジェクトに対して許容される。三、argmentsオブジェクトを本物の配列に変換します。argmentsオブジェクトは本物のjavascript配列ではありませんが、簡単にそれを標準のデータに変換して、配列操作を行うことができます。
var args = Array.prototype.slice.call(arguments); 
では、この変数argsは、関数のすべてのパラメータを含む標準javascript配列オブジェクトを含んでいます。四、予め置いたアーグメンントオブジェクトを通じて関数Aggamentsオブジェクトを作成することにより、すべての種類のjavascript方法を実行することができます。ここにmakeFun関数の定義を添付します。この関数は、関数参照とこの関数のすべてのパラメータを提供することを可能にします。彼は匿名関数を返して指定された関数を呼び出します。また、匿名関数の呼び出しに付随するパラメータも提供します。
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)));  
  };  
}
最初のargmentオブジェクトはmakeFunにあなたが呼びたい関数の参照を提供します。彼はargments配列から除去されました。そして、makeFunは、匿名関数を返して所定の方法を実行する。最初のアプリケーションのargmentは関数呼び出しの範囲を指しています。主に関数内部の鍵部分が指しています。私たちはまずこれをnullとします。二番目のアーグメンントは、この関数のためにアーグメンントオブジェクトに変換されます。makeFunはオリジナルの配列値をargmentsオブジェクトに直列にして匿名関数と呼び出し関数の配列に提供します。テンプレートを出力するにはいつも同じ位置が必要です。このようにテンプレートを参照するたびにformat関数を呼び出す必要はありません。makeFunの汎用機能を使って、formatを呼び出して自動的にテンプレートの関数を補充することができます。
var majorTom = makeFunc(format, ”This is Major Tom to ground control. I'm %1.”);
このようにmajor Tom関数を呼び出すことができます。
majorTom(“stepping through the door”);   
majorTom(“floating in a most peculiar way”);
は毎回major Tomを呼び出します。format関数と最初のargmentを同時に呼び出します。テンプレートを作成しました。
“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.”
5に戻ります。自分の関数を引用して作成するのはかっこいいと思いますが、argmentsにはもっと驚きがあります。彼は他にも有用な特性があります。Agments.calleeは、関数の参照を含めて、argmentオブジェクトを作成します。どうやって使うべきですか?Agments.callee方法は匿名関数を便利に自分自身に向けることができる。Repeatは、関数参照と2つの数字を積載した関数です。最初の数字は関数が何回か呼び出されます。2番目の数字は呼び出しの間隔時間で、単位はミリ秒です。
function repeat(fn, times, delay) {   
  return function() {  
    if(timesC > 0) {  
      fn.apply(null, arguments);  
      var args = Array.prototype.slice.call(arguments);  
      var self = arguments.callee;  
      setTimeout(function(){self.apply(null,args)}, delay);  
    }  
  };  
}
Repeat関数は、argments.callee方法を使用して変数selfから参照を取得し、元のコマンドを実行する関数を指す。これにより、匿名関数は再び自身を呼び出すことができる。スーパープロファイルの関数があります。文字列を載せて、alertメソッドを実行します。
function comms(s) {   

  alert(s);  

しかし、このバージョンを通じて、この動作を3回繰り返してもいいです。毎回2秒間隔で作成したいです。そこで、私たちは
var somethingWrong = repeat(comms, 3, 2000);   
somethingWrong(“Can you hear me, major tom?”);
でsomethingWrong関数を呼び出した結果、この動作を3回繰り返すことができます。alert間隔は2秒です。Agmentsはよく使われていませんが、ちょっと変わっています。でも、サプライズがあります。私たちが知る価値があります。