上記の概念を参照する前に、最初にJavaScriptの関数の関数の隠されたパラメーターについて話したいと思います。
議論
引数は、実行されるパラメーターとその関数を呼び出す機能を表します。 [function。]引数[n]パラメーター
関数:オプション。関数オブジェクトの名前は現在実行されています。
N:オプション。パラメーター値インデックスを0から関数オブジェクトに渡す。 argumeentsは、関数が呼び出されたときに指定されたパラメーターに加えて作成された隠されたオブジェクトであることを示しています。引数は、配列に似たオブジェクトです。アレイのようなアクセスの性質とメソッドがあるため、配列があります。配列長属性の長さがあります。また、引数オブジェクトが機能に渡される関数を保存するパラメーターもあります。これは、関数ステートメントで定義されたパラメーターリストに限定されず、引数オブジェクトを作成するために明示的に作成することはできません。引数オブジェクトは、関数の開始時にのみ使用できます。
次の例では、これらのプロパティを詳細に説明しています
次のようにコードコードをコピーします。
//引数オブジェクトの使用
関数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 += ""
for(i = 0; i <numargs; i ++){//パラメーターコンテンツを取得します。
s + = "arg" + i + "=" + arguments + "" "";
}
return(s); //パラメーターリストを返します。
}
引数は配列(配列クラス)ではないことを説明するコードを次に示します。
次のようにコードコードをコピーします。
array.prototype.setValue = 1;
alert(new Array()。自己値);
関数tests(){
アラート(arguments.selfValue);
}
最初のアラートディスプレイ1があります。つまり、配列オブジェクトには1の値を持つ自己値属性があります。関数testagumensを呼び出すと、「未定義」は、それが議論の属性ではないことを示しています。は、引数の属性、つまり、引数は配列オブジェクトではありません。
ここに追加する簡単な方法を追加する:alert(arguments instance of array);
Alert(objectofの引数Instance);
発信者
現在の関数を呼び出す関数への参照を返します。
functionname.caller
functionNameオブジェクトは、実行機能の名前です。
説明します
関数の場合、発信者属性は、関数が実行されたときにのみ定義されます。関数が最上層から呼び出された場合、発信者にはnullが含まれます。発信者属性が文字列のコンテキストで使用される場合、結果はfunctionname.tstringと同じです。つまり、関数の関数が表示されることを示します。
注:function.toString()は、関数の抗強度関数を実現できます。
次の例は、発信者属性の使用を示しています。
次のようにコードコードをコピーします。
// 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)
返品1;
それ以外
n + arguments.callee(n -1)を返す
}一般的な再帰関数と比較:var sum = function(n){
if(1 == n)1を返します。
それ以外の場合は、n + sum(n-1)を返します。
}
呼び出し時:アラート(sum(100));
その中で、関数自体への参照が含まれています。
申請して電話してください
彼らの役割は、関数を別のオブジェクトに結合することです。
apply(thisarg、argarray);
call(thisarg [、arg1、arg2 ...]);
つまり、すべての関数内のこのポインターはthisargに割り当てられます。これは、関数を別の方法として使用する目的の目的を実現できます。
ArgarrayとThisargのパラメーターが提供されていない場合、グローバルオブジェクトはThisargとして使用され、パラメーターに渡すことはできません。 CALLの説明コールメソッドは、関数のオブジェクトのコンテキストを初期コンテキストから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フレームワークのプロトタイプに定義モデルを作成します。現在のコードは次のとおりです。
次のようにコードコードをコピーします。
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 Vehicle( "Moto");
moto.showself();