js_javascript スキルにおける引数、呼び出し元、呼び出し先、適用の使用法の概要

WBOY
リリース: 2016-05-16 17:01:59
オリジナル
988 人が閲覧しました

上記の概念について言及する前に、まず JavaScript の関数の暗黙的なパラメーターである引数について説明したいと思います。

引数

このオブジェクトは、実行される関数とそれを呼び出す関数のパラメーターを表します。

[function.]arguments[n]
パラメータ関数: オプション。現在実行中の Function オブジェクトの名前。 n: オプション。 Function オブジェクトに渡されるパラメーター値の 0 から始まるインデックス。

説明
Arguments は、関数呼び出し時に指定されたパラメータに加えて作成される隠しオブジェクトです。 Arguments は配列に似ていますが、配列ではないオブジェクトです。配列と同じアクセス プロパティとメソッドを持ち、対応する単一パラメーターの値に argument[ を通じてアクセスできるためです。 n] であり、配列長属性 length を持ちます。また、引数オブジェクトには、関数宣言で定義したパラメータリストに限らず、実際に関数に渡されるパラメータが格納されており、明示的に作成することはできません。引数オブジェクトは関数の先頭でのみ使用できます。次の例では、これらのプロパティの詳細を示します。

コードをコピー コードは次のとおりです。

//引数オブジェクトの使用法。
function ArgTest(a, b){
var i, s = "ArgTest 関数が期待されています ";
var numargs = argument.length; // 渡されたパラメータの値を取得します。
var expargs = ArgTest.length; // 期待されるパラメータの値を取得します。
if (expargs < 2)
s = expargs " 引数。";
else
s = expargs " 引数。";
if (numargs < 2)
s = numargs " が渡されました。";
else
s = numargs " が渡されました。";
s = "nn"
for (i =0 ; i s = " Arg " i " = " argument[i] "n";
}
return(s);
}

引数が配列 (Array クラス) ではないことを説明するコードをここに追加しました:
コードをコピー コードは次のとおりです:

Array.prototype.selfvalue = 1;
alert(new Array().selfvalue);
function testAguments(){
alert (arguments.selfvalue);
}

コードを実行すると、最初のアラートに 1 が表示されることがわかります。これは、配列オブジェクトが値を持つ selfvalue 属性を持っていることを意味します。 1 であり、関数 testAguments を呼び出すと、「未定義」が表示されます。これは、それが引数のプロパティではないこと、つまり、引数が配列オブジェクトではないことを示しています。

発信者

現在の関数を呼び出した関数への参照を返します。
functionName.caller
functionName オブジェクトは、実行される関数の名前です。

説明
関数の場合、caller 属性は関数の実行時にのみ定義されます。関数がトップレベルから呼び出される場合、caller には null が含まれます。 caller 属性が文字列コンテキストで使用される場合、結果は functionName.toString と同じになります。つまり、関数の逆コンパイルされたテキストが表示されます。

次の例は、caller 属性の使用法を示しています。

コードをコピーします コードは次のとおりです。

// 呼び出し側デモ {
function callerDemo() {
if (callerDemo.caller) {
var a= callerDemo.caller.toString();
アラート(a);
} else {
alert("これはトップ関数です");
}
}
function handleCaller() {
🎜>
呼び出し先

実行中の Function オブジェクト (指定された Function オブジェクトの本体) を返します。

[function.]arguments.callee
オプションの関数パラメーターは、現在実行されている Function オブジェクトの名前です。

説明
callee 属性の初期値は、実行される Function オブジェクトです。
callee 属性は、関数オブジェクト自体への参照を表す引数オブジェクトのメンバーです。これは、匿名関数の再帰や関数のカプセル化を保証するのに役立ちます。たとえば、次の例では、 1からnまでの自然数の和。このプロパティは、関連する関数が実行されている場合にのみ使用できます。また、呼び出し先には長さ属性があり、検証にはこの方が適している場合があることにも注意してください。 argument.length は実際のパラメータの長さ、arguments.callee.length は仮パラメータの長さです。これにより、呼び出し時の仮パラメータの長さが実際のパラメータの長さと一致しているかどうかを判断できます。


コードをコピー コードは次のとおりです:

//callee can printそれ自体
function calleeDemo() {
alert(arguments.callee);
}
//パラメータの検証に使用されます
function calleeLengthDemo(arg1, arg2) {
if (arguments.callee) length= =arguments.callee.length) {
window.alert("仮パラメータと実際のパラメータの長さが正しいことを確認してください!");
argument.length);
alter("仮パラメータ) length: " argument.callee.length);
}
}
//再帰計算
var sum = function(n){
if (n return 0;
else
return n +arguments.callee(n - 1)
}


より一般的な再帰関数:


var sum = function(n){
if (n<=0)
return 0;
else
return n sum (n-1);
}


呼び出し時:alert(sum( 100));
関数にはsum 自体への参照は単なる変数名です。関数内で sum を呼び出すことは、callee を使用する方が適切であることを反映できません。

お申込み・お電話

それらの機能は、実行のために関数を別のオブジェクトにバインドすることです。この 2 つの唯一の違いは、パラメーターを定義する方法です。

apply(thisArg,argArray);

call(thisArg[,arg1,arg2…] ]);

つまり、すべての関数内の this ポインターには thisArg が割り当てられ、関数を別のオブジェクトのメソッドとして実行するという目的を実現できます

適用の手順

argArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。 argArray も thisArg も指定されていない場合は、Global オブジェクトが thisArg として使用され、
パラメータを渡すことはできません。


call の説明

call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisArg で指定された新しいオブジェクトに変更できます。 thisArg パラメータが指定されていない場合は、Global オブジェクトが thisArg として使用されます

関連ヒント:

call と apply を適用する別のトリックがあります。call と apply を使用して別の関数 (クラス) を適用した後、現在の関数 (クラス) に他の関数 (クラス) のメソッドまたは属性を持たせることもできます。 「継承」といいます。次の例を見てください:


コードをコピー コードは次のとおりです:// デモ継承の
function base() {
this.member = " dnnsun_Member";
this.method = function() {
window.alert(this.member);
}
}
function extend() {
base.call(this);
window.alert(member);
window.alert(this.method);
}


上記の例からわかるように、extend は呼び出し後に Base のメソッドとプロパティを継承できます。

ちなみに、apply は、クラスを定義するパターンを作成するために JavaScript フレームワーク プロトタイプで使用されます。

実装コードは次のとおりです:

コードをコピー コードは次のとおりです:

var Class = {
create: function() {
return function() {
this.initialize.apply(this, argument);
}
}
}

分析: からコード、オブジェクトにはメソッドが 1 つだけ含まれています。Create は関数とクラスを返します。ただし、これは、initialize を呼び出すクラスのコンストラクターでもあり、このメソッドはクラスの作成時に定義される初期化関数です。このようにして、プロトタイプでのクラス作成モードを実現できます

例:

コードをコピー コードは次のとおりです:

var vehicle=Class .create( );
vehicle.prototype={
Initialize:function(type){
this.type=type;
}
showSelf:function(){
alert( "この車両は " this.type);
}
}

var moto=新しい車両("Moto");
moto.showSelf();

関連ラベル:
js
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!