JS関数の実際のパラメータ紹介
5538 ワード
:Arguments
関数コードでは、特別なオブジェクトargmentsを使用して、識別子argmentsはAgmentsオブジェクトを参照します.開発者はパラメータ名を明確に示す必要がなく、それらにアクセスすることができます.例えば、関数sayHi()において、最初のパラメータはメッセージである.argments[0]でもこの値にアクセスできます.すなわち、最初のパラメータの値(最初のパラメータは位置0にあり、2番目のパラメータは位置1にあり、これに類推します.)したがって、名前のパラメータを明確にする必要はなく、関数を書き換えることができます.Jsコード
function sayHi() {
if (arguments[0] == "bye") {
return;
}
Alert("Hello" + arguments[0]);
}
,Arguments 。arguments[] 。 arguments[] , arguments[] 。 :
Jsコードfunction f(x) {
alert(x);//
arguments[0] = null;// x
alert(x);// null
}
Arguments length
argmentsはまた、length属性を有し、パラメータの個数は、argments.lengthで得られる.他のプログラム設計言語と違って、ECMAScriptは関数に伝達されるパラメータの個数が関数定義のパラメータ個数に等しいかどうかを検証しません.開発者が定義した関数は、任意の数のパラメータ(Netscapeのドキュメントによって最大25個まで許容されます)を受け入れます.欠落したパラメータはundefinedで関数に伝達されます.余分な25のパラメータは無視されます.関数に伝達するパラメータの個数をargmentsオブジェクトで判断すれば、アナログ関数の再負荷が可能です.
Jsコード
function doAdd(iNum) {
Alert(iNum + 100);
}
function doAdd(iNum) {
Alert(iNum + 10);
}
doAdd(10);//20
, ECMAScript 。
Agmentsのプロパティcalee Agmentsオブジェクトはまた、カレント実行中の関数を参照するためにカレント属性を定義している.このオブジェクトの名前がない関数の呼び出し自体は非常に有用です.以下は名前のない関数の直接量で、階乗を計算します.Jsコード
var f = function (x) {
if (x <= 1) {
return 1;
}
return x * arguments.callee(x - 1);
};
alert(f(3));//6
もちろん、臨時に名前を取ってもいいです.var f=function tmpName(x){if(x==1){return 1;}return x*tmpName(x-1);;alert(f(3))//6
関数のプロパティlength 関数は参照の種類ですので、属性と方法もあります. ECMAScript 定義された関数の属性 length(読み取り専用)は、関数宣言のパラメータ個数を、argments.lengthとは異なり、このlength属性は、関数体の内部と外部で有効であると宣言しています.たとえば:
Jsコード
function doAdd(iNum) {
alert(iNum + 10);
}
function sayHi() {
alert("Hi");
}
alert(doAdd.length);// : 1
alert(sayHi.length);// : 0
いくつかのパラメータを定義しても、ECMAScript関数は任意の複数のパラメータ(最大25個)を受け入れることができます.属性lengthは、デフォルトの関数宣言のパラメータの個数を見るためだけに、簡単な方法を提供しています.関数のプロパティ
各関数にはプロトタイプの属性があります.これは予め定義されたプロトタイプのオブジェクトを参照します.プロトタイプオブジェクトは、新しいオブジェクトクラスを定義する際に非常に重要な役割を果たしているnew演算子を用いて、関数を構成関数として作用します.
…
あなたの関数の属性を定義します.
関数が呼び出し中に一定の値を維持する必要がある場合、Functionオブジェクトの属性を使用することは、グローバル変数を定義することよりも便利です.この情報をグローバル変数に格納することができますが、この情報は関数自身が使うものですので、グローバル変数を使用する必要はありません.Functionオブジェクトの属性に情報を格納するのが一番いい方法です.
Jsコード
//
// ,
uniqueInteger.counter = 0;
// ,
//
function uniqueInteger() {
// 1,
return uniqueInteger.counter++;
}
alert(uniqueInteger());//0
alert(uniqueInteger());//1
関数の方法appy()とcall()この2つのキーワードは簡単に this参照オブジェクト(運転空間)の強制変換を行います. , 二つの文法は以下の通りです.fun.call(object,arg 1,arg 2,…)fun.apply(object、[arg 1,arg 2,...])両者の目的は同じです.関数に提供されるパラメータ上の呼び出し方法は違います.
この2つの方法を使用すると、他のオブジェクトを呼び出す方法のように関数を呼び出すことができます.call()とapplay()の最初のパラメータは呼び出す関数のオブジェクトで、関数の中でこのパラメータはキーワードthisの値です.コール()の残りのパラメータは呼び出したい関数に渡す値です.例えば、2つの数字を関数f()に渡すために、オブジェクトoとして呼び出す方法は、以下のコードを使用してもよい.
Jsコード
function f (arg1, arg2){
this.attr1 = arg1;
this.attr2 = arg2;
}
//-----
// , window
f(1,2);
// window
alert(window.attr1);
alert(window.attr2);
//-----
// this new
var fun = new f(3,4);
alert(fun.attr1);//3
alert(fun.attr2);//4
//-----
var o = {};
// this o
f.call(o,5,6);
alert(o.attr1);//5
alert(o.attr2);//6
//f.call(o,5,6);
o.m = f;
o.m(5,6);
delete o.m;
alert(o.attr1);//5
alert(o.attr2);//6
// , this o
window.f.call(o,7,8);
alert(o.attr1);//7
alert(o.attr2);//8
apply()メソッドはcall()方法と似ていますが、関数に渡すパラメータは配列で指定されています.Jsコード
f.apply(o,[5,6])
例えば、1つの数字配列の中の最大数を見つけるには、配列要素をappy()法でMath.max()関数に渡すことができます.Jsコード
var array_of_numbers = [5,7,3,6];
var biggest = Math.max.apply(null, array_of_numbers);
alert(biggest);//7
valueOf() toString()
Function オブジェクトはすべてのオブジェクトと共有する標準もあります. valueOf() 方法と toString() 方法.この二つの方法はいずれも関数のソースコードであり、デバッグ時に特に有用である.Jsコード
function doAdd(iNum) {
alert(iNum + 10);
}
alert(doAdd.toString());
alert(doAdd.valueOf