検索
ホームページウェブフロントエンドjsチュートリアルjs apply/call/caller/callee/bindの使い方と違い分析_javascriptスキル

1. メソッド
を呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます (実際には、オブジェクトの内部ポインターを変更します。つまり、オブジェクトの this が指す内容を変更します)。 )。
Js コード
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。 thisObj パラメータが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
Js コード
コードをコピー コードは次のとおりです:

コード
function Obj(){this.value="Object! ";}
var value="グローバル変数"; function Fun1( ){alert(this.value);}
window.Fun1(); //グローバル変数
Fun1.call(window); //グローバル変数
Fun1.call(document.getElementById) ('myText ')); //テキストを入力
Fun1.call(new Obj());

Js コード
コード

コードをコピー コードは次のとおりです。
var first_object = {
num: 42
};
var Second_object = {
num: 24
}; >return this .num * mult;
multiply.call(first_object, 5); // 42 * 5 を返します
multiply.call(first_object, 5) // 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]) を同時に使用する利点。 apply の 2 番目のパラメータとして渡される現在の関数の引数オブ​​ジェクトを直接追加できることです。 Js コード




コードをコピー
コードは次のとおりです: var func=new function() {this.a="func"} var myfunc=function(x,y){
var a="myfunc"
alert(this.a); x y);
}
myfunc.call(func,"var"," fun");// "func" "var fun"
myfunc.apply(func,["var"," fun) "]) ;// "func" "var fun"



3. 呼び出し元属性

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




コードをコピー
コードは次のとおりです。 function CallLevel() { if (CallLevel.caller == null) alert("CallLevel がトップレベルから呼び出されました。");
else
alert("CallLevel が別の関数によって呼び出されました:n" CallLevel .caller) ;
}
関数 funCaller(){
CallLevel();
CallLevel()


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

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

5.bind
Js コード
コードをコピー コードは次のとおりです:

var first_object = {
数値: 42
};
var Second_object = {
数値: 24
};
関数 multiply(mult) {
return this.num * mult ;
}
Function.prototype.bind = function(obj) {
var method = this,
temp = function() {
return メソッド。 apply(obj, argument);
return temp;
var first_multiply = multiply.bind(first_object); // 42 * 5
いわゆる「クロージャ」。多数の変数とこれらの変数がバインドされている環境を持ち、これらの変数が式の一部となる式 (通常は関数) を指します。
クロージャに関して、最も簡単に説明すると、ECMAScript では内部関数の使用が許可されています。つまり、関数定義と関数式は別の関数の関数本体に配置されます。さらに、これらの内部関数は、すべてのローカル変数、パラメータ、およびそれらが存在する外部関数で宣言された他の内部関数にアクセスできます。クロージャは、これらの内部関数の 1 つが、それらを含む外部関数の外側で呼び出されるときに形成されます。つまり、内側の関数は外側の関数が戻った後に実行されます。この内部関数が実行されるときも、ローカル変数、パラメーター、および外部関数の他の内部関数にアクセスする必要があります。これらのローカル変数、パラメータ、関数宣言の値は(最初は)外側の関数が戻ったときの値ですが、内側の関数の影響も受けます。
要するに、クロージャの機能は、out 関数が実行されて返された後、JavaScript のガベージ コレクション メカニズム GC が out 関数によって占有されているリソースを再利用するのを防ぐことです。これは、out 関数の内部関数の内部関数が原因で、実行は out 関数の変数に依存します。
クロージャーの 2 つの特徴:
1. 関数変数への参照として - 関数が返されるときにアクティブ化されます。
2. クロージャは、関数が戻ったときにリソースを解放しないスタック領域です。
例 1: HTML コード



コードをコピー


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

< ;script type="text/javascript"> function setupSomeGlobals() { // クロージャ内で終了するローカル変数 var num = 666>// いくつかの参照を格納します。グローバル変数として関数に gAlertNumber = function() {alert(num); } gIncreaseNumber = function() { num ; } gSetNumber = function(x) { num = x; }



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール