apply() と call()_javascript スキルの違いと関係を明確にする
JavaScript という自由で常に変化し続ける言語を学ぶ過程でこの感覚に出会ったら、これからは「偏見」を捨ててください、これはあなたにとって間違いなく新しい世界なのですから、JavaScript をゆっくりと溶かしてください。
さて、本題に戻りましょう。この機能は主に apply メソッドと call メソッドの使用に反映されています。 🎜>apply と call を区別するには、
類似点: 2 つのメソッドの効果はまったく同じです。
違い: 渡されるメソッド パラメータが異なります
では、メソッドの役割と、メソッドによって渡されるパラメータは何ですか?
foo.call(this, arg1, arg2, arg3) を分析してみましょう。上記の
foo はメソッドです。これはメソッドが実行されるときのコンテキスト関連オブジェクトです。arg1、arg2、arg3 はメソッドが実行されるときに foo メソッドに渡される、いわゆるコンテキスト関連オブジェクトです。ここで、オブジェクト指向プログラミングの基礎があれば、それは簡単に理解できます。これは、変換されたオブジェクトのクラス インスタンスにあります。
JavaScript では、コードは常にコンテキスト オブジェクトを持ち、コードはそれを処理します。コンテキスト オブジェクトは this 変数によって表され、この this 変数は常に現在のコードが配置されているオブジェクトを指します。
これが何であるかをよりよく理解するために、例を示します。
//このときの実行コンテキスト オブジェクトは、現在のインスタンスです Object
this.message = "message of a"
this.getMessage = function(){
return this.message;
}
//クラス A インスタンス オブジェクトを作成します
var a = new A(); >// クラス インスタンスの getMessage メソッドを呼び出してメッセージ値を取得します
alert(a.getMessage());
// クラス B
関数 B() を作成します{
this.message = "message of b";
this.setMessage = function(msg){
this.message = msg;
}
//クラス B インスタンス オブジェクトを作成します
var a = new B();
余談: JavaScript オブジェクトのすべてのプロパティはパブリック (パブリック) であり、プライベート (プライベート) などというものは存在しないため、メッセージ属性 alert(a.message);
クラス A と B はどちらも message 属性 (オブジェクト指向の用語ではメンバー) を持ち、A にはメッセージを取得するための getMessage メソッドがあり、B には setMessage があることがわかります。メッセージを設定するメソッドを以下に示します。
コードをコピーします。
コードは次のとおりです。 >
apply と call は同じ効果があるため、次のことができます。
call と apply の機能は、自分のメソッドを呼び出すのと同じように、他の人のメソッドを借りて呼び出すことです。
わかりました。call と apply の類似点は理解しました。 apply--それらが機能した後、それらの違いを見てみましょう。上記を読んだ後は、おそらく例を知っていると思います。
b.setMessage.call(a, "a's message") は a.setMessage と同等です。 (「a のメッセージ」) を見ると、「a のメッセージ」が
のパラメータとして渡されていることがわかります。では、apply ではどのように表現されるのでしょうか。Apply はアプリケーションと組み合わせる必要があるため、直接説明するとわかりません。一目でわかるように、アプリケーション シナリオを設計してみましょう:
コードをコピーします
コードは次のとおりです:
function print(a, b, c, d){
alert(a b c d);
}
function example(a, b, c, d){
// call メソッドを使用して print を借用し、パラメータを明示的に分割して渡します。
print.call(this, a, b, c, d);//apply メソッドを使用して print を借用します。パラメータは配列として渡されます。
//ここでは、引数配列を JavaScript メソッドで直接使用します
print.apply(this, argument)
// または配列にカプセル化します
print .apply(this, [a, b, c, d]);
}
//「バックライト スクリプト」は
example("back", "light", "feet") の下に表示されます, "this");
最後の文は、サンプルメソッドが直接呼び出されるため、このメソッドの context オブジェクトは window オブジェクトです。
したがって、call メソッドと apply メソッドの最初のパラメータを除きます。実行時のコンテキストオブジェクトであるため、呼び出しメソッドの他のパラメータは順番に借用メソッドにパラメータとして渡されます。Applyにはパラメータが2つしかなく、2番目のパラメータは配列として渡されます。 apply メソッドの違いは、2 番目のパラメータから順番に、call メソッドのパラメータがパラメータとして渡されることです。Apply はこれらのパラメータを配列に直接入れて渡します。最後に借りたメソッドのパラメータリストは同じです。
アプリケーションシナリオ:
パラメータが明確な場合は call が使用でき、パラメータが不明な場合は apply が使用できます。引数を与える
// foo パラメータは複数の
function foo(){
print.apply(window, argument) ; >}

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









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

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

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

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

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...
