検索
ホームページウェブフロントエンド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の文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

独自のAjax Webアプリケーションを構築します独自のAjax Webアプリケーションを構築しますMar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか?ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか?Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

jQueryマトリックス効果jQueryマトリックス効果Mar 10, 2025 am 12:52 AM

マトリックスの映画効果をあなたのページにもたらしましょう!これは、有名な映画「The Matrix」に基づいたクールなJQueryプラグインです。プラグインは、映画の古典的な緑色のキャラクター効果をシミュレートし、画像を選択するだけで、プラグインはそれを数値文字で満たされたマトリックススタイルの画像に変換します。来て、それを試してみてください、それはとても面白いです! それがどのように機能するか プラグインは画像をキャンバスにロードし、ピクセルと色の値を読み取ります。 data = ctx.getimagedata(x、y、settings.greasize、settings.greasize).data プラグインは、写真の長方形の領域を巧みに読み取り、jQueryを使用して各領域の平均色を計算します。次に、使用します

シンプルなjQueryスライダーを構築する方法シンプルなjQueryスライダーを構築する方法Mar 11, 2025 am 12:19 AM

この記事では、jQueryライブラリを使用してシンプルな画像カルーセルを作成するように導きます。 jQuery上に構築されたBXSLiderライブラリを使用し、カルーセルをセットアップするために多くの構成オプションを提供します。 今日、絵のカルーセルはウェブサイトで必須の機能になっています - 1つの写真は千の言葉よりも優れています! 画像カルーセルを使用することを決定した後、次の質問はそれを作成する方法です。まず、高品質の高解像度の写真を収集する必要があります。 次に、HTMLとJavaScriptコードを使用して画像カルーセルを作成する必要があります。ウェブ上には、さまざまな方法でカルーセルを作成するのに役立つ多くのライブラリがあります。オープンソースBXSLiderライブラリを使用します。 BXSLiderライブラリはレスポンシブデザインをサポートしているため、このライブラリで構築されたカルーセルは任意のものに適合させることができます

Angularを使用してCSVファイルをアップロードおよびダウンロードする方法Angularを使用してCSVファイルをアップロードおよびダウンロードする方法Mar 10, 2025 am 01:01 AM

データセットは、APIモデルとさまざまなビジネスプロセスの構築に非常に不可欠です。これが、CSVのインポートとエクスポートが頻繁に必要な機能である理由です。このチュートリアルでは、Angular内でCSVファイルをダウンロードおよびインポートする方法を学びます

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。