JavaScriptのcallメソッド、applyメソッド、caller属性、callee属性の詳細コード説明

黄舟
リリース: 2017-03-18 15:14:35
オリジナル
1298 人が閲覧しました


jsのcallメソッド_applyメソッド_caller属性_callee属性

1. callメソッド
はオブジェクトのメソッドを呼び出し、現在のオブジェクトを別のオブジェクトに置き換えます(実際にはオブジェクトの内部ポインタを変更します。つまり、指す内容を変更します)。オブジェクトのこれによって)。

Js コード

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
ログイン後にコピー

パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。 thisObj パラメータが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。

Js code

<input type=“text”id=“myText”value=“input text”>
<script>
functionObj(){this.value=“对象!”;}
varvalue=“global 变量”;
functionFun1(){alert(this.value);}

window.Fun1();   //global 变量
Fun1.call(window);  //global 变量
Fun1.call(document.getElementByIdx_x_x(‘myText’));//input text
Fun1.call(new Obj());//对象!
</script>
ログイン後にコピー

Js code

varfirst_object = {
num: 42
};
varsecond_object = {
num: 24
};
functionmultiply(mult) {
returnthis.num * mult;
}
multiply.call(first_object, 5); // returns 42 * 5
multiply.call(second_object, 5); // returns 24 * 5
ログイン後にコピー

2. applyメソッド
applyメソッドの最初のパラメータは、現在のオブジェクト、つまり関数内のthisに渡されるオブジェクトでもあります。次のパラメータは、現在のオブジェクトに渡されるパラメータです。
ApplyとCallは同じ機能ですが、パラメータに違いがあります。最初のパラメータの意味は同じですが、2 番目のパラメータの場合: apply はパラメータ配列で渡します。つまり、複数のパラメータが 1 つの配列に結合されて渡されますが、call は call のパラメータとして渡されます ( 2 つのパラメータから開始します)。
たとえば、func.call(func1,var1,var2,var3) に対応する apply の記述メソッドは次のとおりです: func.apply(func1,[var1,var2,var3]) を同時に使用する利点は次のとおりです。現在の関数の引数オブ​​ジェクトを適用として直接使用できます。2 番目のパラメーターが渡されます。

Js コード

var func=newfunction(){this.a=“func”}
varmyfunc=function(x,y){
vara=“myfunc”;
alert(this.a);
alert(x + y);
}
myfunc.call(func,“var”,“ fun”);// ”func” ”var fun”
myfunc.apply(func,["var"," fun"]);// ”func” ”var fun”
ログイン後にコピー

3. caller 属性
は、現在の関数を呼び出す関数本体である関数への参照を返します。
functionName.caller: functionName オブジェクトは、実行された関数の名前です。
注:
関数の場合、caller 属性は関数の実行時にのみ定義されます。 関数が JScript プログラムのトップレベルから呼び出された場合、 caller には null が含まれます。 caller 属性が文字列コンテキストで使用される場合、結果は functionName.toString と同じになります。つまり、関数の逆コンパイルされたテキストが表示されます。

Js コード

<script>
functionCallLevel(){
if(CallLevel.caller ==null)
alert(“CallLevel was called from the top level.”);
else
alert(“CallLevel was called by another function:\n”+CallLevel.caller);
}
functionfunCaller(){
CallLevel();
}
CallLevel();
funCaller()
</script>
ログイン後にコピー

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

Jsコード

//callee可以打印其本身
functioncalleeDemo() {
alert(arguments.callee);
}
//用于验证参数
functioncalleeLengthDemo(arg1, arg2) {
if(arguments.length==arguments.callee.length) {
window.alert(“验证形参和实参长度正确!”);
return;
} else{
alert(“实参长度:”+arguments.length);
alert(“形参长度: ”+arguments.callee.length);
}
}
//递归计算
var sum =function(n){
if(n <= 0)
return 1;
else
returnn +arguments.callee(n - 1)
}
ログイン後にコピー

5.バインド

Jsコード

<script type=“text/javascript”>
varfirst_object = {
num: 42
};
varsecond_object = {
num: 24
};

functionmultiply(mult) {
returnthis.num * mult;
}

Function.prototype.bind = function(obj) {
var method =this,
temp = function() {
returnmethod.apply(obj, arguments);
};

return temp;
}

varfirst_multiply = multiply.bind(first_object);
first_multiply(5); // returns 42 * 5

varsecond_multiply = multiply.bind(second_object);
second_multiply(5); // returns 24 * 5
</script>
ログイン後にコピー

以上がJavaScriptのcallメソッド、applyメソッド、caller属性、callee属性の詳細コード説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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