ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScriptのcallとapplyの違いは何ですか

JavaScriptのcallとapplyの違いは何ですか

WBOY
WBOYオリジナル
2022-01-28 15:24:242426ブラウズ

JavaScript では、call() メソッドと apply() メソッドは同じ機能を持ちます。違いはパラメータの受け取り方法にあります。call() メソッドを使用する場合、関数に渡すパラメータは次のとおりです。 apply()の際にパラメータの配列を関数に渡します。

JavaScriptのcallとapplyの違いは何ですか

このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript における call と apply の違いは何ですか。

call() メソッドは、指定されたこの値と別途提供されたパラメーター (パラメーターのリスト) を使用して関数を呼び出します。

注: このメソッドの機能は apply() メソッドに似ています。唯一の違いは、call() メソッドが複数のパラメータのリストを受け入れるのに対し、apply() メソッドは複数のパラメータを含むリストを受け入れることです。パラメータの配列。

構文

fun.call(thisObj[, arg1[, arg2[, ...]]])

定義: オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。

説明:

call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。

thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。

パラメータ

ThisObj

fun 関数の実行時に指定される this の値。指定された this 値は、関数実行時の実際の this 値である必要はないことに注意してください。関数が非厳密モードの場合、null および未定義として指定された

は自動的にグローバルを指します。 value. オブジェクト (ブラウザのウィンドウ オブジェクト)、およびその値がプリミティブ値 (数値、文字列、ブール値) である this は、プリミティブ値の自動ラッピング オブジェクトを指します。

arg1, arg2, ...

指定されたパラメータのリスト。

戻り値

戻り結果には、指定されたこの値とパラメータが含まれます。

apply()

apply() メソッドは、指定されたこの値を使用して関数を呼び出し、配列 (または配列のようなオブジェクト) パラメーターとして提供されます。

構文

fun.apply(thisObj, [argsArray])

定義: オブジェクトのメソッドを適用して、現在のオブジェクトを別のオブジェクトに置き換えます。

説明:

argsArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。

argArray も thisObj も指定されていない場合は、Global オブジェクトが thisObj として使用され、パラメータを渡すことはできません。

Parameters

ThisObj

fun 関数の実行時に指定される this の値。指定された this 値は、関数実行時の実際の this 値である必要はないことに注意してください。関数が非厳密モードの場合、指定された

は、関数実行時に自動的にグローバル オブジェクトを指します。 null または未定義 (ブラウザのウィンドウ オブジェクトです)、値がプリミティブ値 (数値、文字列、ブール値) である this は、プリミティブ値の自動ラッピング オブジェクトを指します。

argsArray

配列または配列に似たオブジェクト。その配列要素は個別のパラメーターとして fun 関数に渡されます。このパラメータの値が null または未定義の場合、パラメータを渡す必要がないことを意味します。 ECMAScript 5

以降では、配列のようなオブジェクトを使用できるようになりました。

概要

どちらも同じ効果があり、obj (つまり this) を thisObj にバインドします。この時点で、thisObj は obj のプロパティとメソッドを持ちます。言い換えれば、thisObj は obj のプロパティとメソッドを「継承」します。

唯一の違いは、apply は配列パラメータを受け入れ、call は連続パラメータを受け入れることです。

call() メソッドと apply() メソッドは同じ機能を持ちますが、パラメータの受け取り方法が異なります。 call() の場合、最初のパラメータは変更されない this の値ですが、変更されるのは、残りのパラメータが関数に直接渡されることです。 (call() メソッドを使用する場合、関数に渡されるパラメータは 1 つずつリストする必要があります。apply() を使用する場合、パラメータ配列が関数に渡されます。) 次のコードで説明します。 call and apply ある関数の実行時にコンテキストを変更するために存在します、つまり関数本体内で this のポインタを変更することです。なぜなら、JavaScriptの関数には「定義コンテキスト」と「実行時コンテキスト」という概念があり、「コンテキストは変更可能」だからです。

両者の機能は全く同じですが、パラメータの受け取り方が異なります。たとえば、関数 fun は次のように定義されています:

function add(c, d){
    return this.a + this.b + c + d;
}
var o = {a:1, b:3};
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34 

は fun.call(this, arg1, arg2); または fun.apply(this, [arg1, arg2]); を通じて呼び出すことができます。その中で、これは指定したいコンテキストであり、任意の JavaScript オブジェクトにすることができます (JavaScript 内のすべてのものはオブジェクトです)。call はパラメーターを順番に渡す必要があり、apply はパラメーターを配列に置きます。

JavaScriptでは関数の引数の数が決まっていないので、適用条件として、引数が明確に分かっている場合はcallを使用し、不明な場合はapplyを使用してパラメータをプッシュします。それを配列に渡します。パラメーターの数が不明な場合は、関数内で引数の配列を介してすべてのパラメーターを調べることができます。

関連する推奨事項: JavaScript 学習チュートリアル

以上がJavaScriptのcallとapplyの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。