上記の概念を参照する前に、最初にjavascript:argumentsの関数の関数の隠されたパラメーターについて話したい
議論
このオブジェクトは、実行され、その関数を呼び出す関数のパラメーターを表します。
[function。]引数[n]
パラメーター関数:オプション。関数オブジェクトの名前は現在実行されています。 N:オプション。パラメーター値インデックスを0から関数オブジェクトに渡す。
説明します
引数は、関数が呼び出されるときに指定されたパラメーターに加えて作成された隠されたオブジェクトです。引数は、配列に似たオブジェクトです。アレイのようなアクセスの性質とメソッドがあるため、配列があります。配列長属性の長さがあります。また、引数オブジェクトが機能に渡される関数を保存するパラメーターもあります。これは、関数ステートメントで定義されたパラメーターリストに限定されず、引数オブジェクトを作成するために明示的に作成することはできません。引数オブジェクトは、関数の開始時にのみ使用できます。次の例では、これらのプロパティを詳細に説明しています。
次のようにコードコードをコピーします。
//オブジェクトオブジェクトの使用。
関数argTest(a、b){{
var i、s = "Argtest関数が期待される";
var numargs = arguments.length; //通過パラメーターの値を取得します。
var expargs = argtest.length; //予想されるパラメーターの値を取得します。
if(expargs <2)
s + = expargs + "argument。";
それ以外
s + = expargs + "arguments。" ;;
if(numargs <2)
s + = numargs + "が渡されました。";
それ以外
s + = numargs + "私たちは合格しました。";
s += "/n/n"
for(i = 0; i <numargs; i ++){//パラメーターコンテンツを取得します。
s + = "arg" + i + "=" + arguments [i] + "/n";
}
return(s); //パラメーターリストを返します。
}
引数は配列(配列クラス)ではないことを説明するコードを次に示します。
次のようにコードコードをコピーします。
array.prototype.setValue = 1;
alert(new Array()。自己値);
関数tests(){
アラート(arguments.selfValue);
}
最初のアラートディスプレイ1があります。つまり、配列オブジェクトには1の値を持つ自己値属性があります。関数testagumensを呼び出すと、「未定義」は、それが議論の属性ではないことを示しています。は、引数の属性、つまり、引数は配列オブジェクトではありません。
発信者
現在の関数を呼び出す関数への参照を返します。
functionname.caller
functionNameオブジェクトは、実行機能の名前です。
説明します
関数の場合、発信者属性は、関数が実行されたときにのみ定義されます。関数が最上層から呼び出された場合、発信者にはnullが含まれます。発信者属性が文字列のコンテキストで使用されている場合、結果はfunctionname.tstringと同じです。つまり、関数のコンパイルテキストが表示されます。
次の例は、発信者属性の使用を示しています。
次のようにコードコードをコピーします。
// Caller demo {
関数calldemo(){
if(callerdemo.caller){
var a = callerdemo.caller.toString();
アラート(a);
} それ以外 {
Alert( "これは最高の関数です");
}
}
function handlecaller(){
callerdemo();
}
カリー
実行されている関数オブジェクトのテキスト、指定された関数オブジェクトのテキストを返します。
[function。] arguments.callee
オプションの関数パラメーターは、現在実行されている関数オブジェクトの名前です。
説明します
Callee属性の初期値は、実行される関数オブジェクトです。
Callee属性は、関数オブジェクト自体への参照を示すArgumentsオブジェクトのメンバーであり、匿名関数の再帰性または関数のパッケージングを助長します。この属性は、相関関数が実行された場合にのみ使用できます。 Calleeには長さの属性があることに注意してください。 arguments.lengthは固体パラメーターの長さであり、arguments.callee.lengthはパラメーターの長さであり、パラメーターの長さが実際のパラメーターの長さと一致しているかどうかを判断できます。
模範的な例
次のようにコードコードをコピーします。
// Calleeはそれ自体を印刷できます
calememo(){{{
アラート(arguments.callee);
}
//パラメーターの検証に使用されます
関数calleelelengthdemo(arg1、arg2){{
if(arguments.length == arguments.callee.length){
window.alert( "高麗人参とソリッドパラメーターの長さの確認が正しい!");
戻る;
} それ以外 {
アラート( "SOLIDパラメーター長:" +arguments.length);
alert( "" shape commidated: +arguments.callee.length);
}
}
//再帰計算
var sum = function(n){
if(n <= 0)
0を返します。
それ以外
n + arguments.callee(n -1)を返す
}
より一般的な再帰関数:
次のようにコードコードをコピーします。
var sum = function(n){
if(n <= 0)
0を返します。
それ以外
n + sum(n-1)を返します。
}
呼び出し時:アラート(sum(100));
その中で、関数自体への参照が含まれています。
申請して電話してください
彼らの役割は、関数を別のオブジェクトに結合することです。
apply(thisarg、argarray);
call(thisarg [、arg1、arg2 ...]);
つまり、関数内のこのポインターはすべてThisargに割り当てられ、これにより、関数を別のオブジェクトとして実行する目的を達成できます。
応用の説明
Argarrayが効果的な配列ではない場合、または議論のオブジェクトではない場合、Typerrorを引き起こします。
ArgarrayとThisargのパラメーターがなければ、グローバルオブジェクトはThisargとして使用されます。
パラメーターに渡すことはできません。
電話の説明
コールメソッドは、関数のオブジェクトのコンテキストを初期コンテキストからthisargによって指定された新しいオブジェクトに変更することができます。
thisargパラメーターが提供されていない場合、グローバルオブジェクトはthisargとして使用されます
関連スキル:
呼び出しと適用には別の手法があります。つまり、コールと適用で別の関数(クラス)を使用した後、別のメソッド(クラス)メソッドまたは属性もあります"継承"。次の例を見てください。
次のようにコードコードをコピーします。
//継承デモンストレーション
関数base(){
this.member = "dnnnsun_member";
this.method = function(){
window.alert(this.member);
}
}
function expedition(){){
base.call(this);
window.alert(メンバー);
window.alert(this.method);
}
上記の例は、コール後、拡張機能がベースのメソッドと属性を継承できることを見ることができます。
ちなみに、使用して、JavaScriptフレームワークProproで定義されたモデルを作成します。
実際、現在のコードは次のとおりです。
次のようにコードコードをコピーします。
var class = {
create:function(){
return function(){
this.initialize.apply(this、arguments);
}
}
}
分析:コードから、オブジェクトには1つのメソッドのみが含まれています。これは、関数、つまりクラスを返す作成です。しかし、これはクラスのコンストラクターでもあり、初期化が呼び出されます。この方法は、クラスの作成中に定義された初期化関数です。この方法で、プロトタイプにクラス作成モードを実装できます
例:
次のようにコードコードをコピーします。
var verice = class.create();
veric.prototype = {
初期化:function(type){
this.type = type;
}
showself:function(){{)
アラート( "これはまさに"+ this.type);
}
}
var moto = new Vene( "Moto");
moto.showself();