検索
ホームページウェブフロントエンドjsチュートリアルJavaScript_javascript スキルにおける apply と call の使い方、意味、違い

apply と call の機能は、操作のために関数を別のオブジェクトにバインドすることです。
Function.prototype.apply(thisArg,argArray); という違いがあります。 .call(thisArg[,arg1[,arg2…]]);
関数のプロトタイプからわかるように、最初のパラメーターの名前は thisArg です。つまり、すべての関数内の this ポインターには値 thisArg が割り当てられます。これにより、関数を別のオブジェクトのメソッドとして実行するという目的が達成されます。 thisArg パラメータを除き、どちらのメソッドも Function オブジェクトに渡されるパラメータです。次のコードは、apply メソッドと call メソッドがどのように機能するかを示しています。

コードをコピーします コードは次のとおりです:
//属性 p とメソッド A を持つ関数 func1 を定義します
function func1(){
this.p="func1-";
this.A=function(arg){
alert (this.p arg);
}
}
//属性 p とメソッド B を使用して関数 func2 を定義します
function func2(){
this.p="func2- " ;
this.B=function(arg){
alert(this.p arg);
}
}
var obj1=new func1();
var obj2= new func2();
obj1.A("byA"); // func1-byA を表示
obj2.B("byB"); // func2-byB を表示
obj1.A.apply( obj2 ,["byA"]); // func2-byA を表示します。ここで、["byA"] は要素が 1 つだけある配列です。以下も同様です。
obj2.B.apply(obj1,["byB"]) ; / / func1-byB を表示
obj1.A.call(obj2,"byA") // func2-byA を表示
obj2.B.call(obj1,"byB"); byB

obj1 のメソッド A が操作のために obj2 にバインドされた後、関数 A 全体の実行環境が obj2 に転送される、つまり this ポインタが obj2 を指していることがわかります。同様に、obj2 の関数 B を obj1 オブジェクトにバインドして実行することもできます。コードの最後の 4 行は、apply 関数と call 関数のパラメーター形式の違いを示しています。

引数の長さ属性とは異なり、関数オブジェクトには長さ属性もあります。これは、呼び出し時に実際に渡されるパラメーターの数ではなく、関数の定義時に指定されたパラメーターの数を表します。たとえば、次のコードでは 2 が表示されます:

コード をコピーします。 コードは次のとおりです:
function sum(a ,b){ return a b;}



JS マニュアルの呼び出しの説明を見てみましょう:

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

わかりやすく説明すると、実際にはオブジェクトの内部ポインタを変更すること、つまりオブジェクトの this が指す内容を変更することになります。これは、オブジェクト指向の js プログラミングで役立つ場合があります。

インターネット上のコードスニペットを引用すると、実行してみると自然に理由がわかります。



[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新して実行する必要があります ]

call 関数と apply メソッド 最初のパラメータは、現在のオブジェクトに渡されるオブジェクトであり、これは関数内にあります。次のパラメータは、現在のオブジェクトに渡されるパラメータです。
次のコードを実行します:

[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、
を実行するために更新する必要があります]<script> function Obj(){this.value="对象!";} var value="global 变量"; function Fun1(){alert(this.value);} window.Fun1(); //global 变量 Fun1.call(window); //global 变量 Fun1.call(document.getElementById('myText')); //input text Fun1.call(new Obj()); //对象! </script>
それぞれ func と var がポップアップしているのがわかります。この時点で、call の各パラメータの意味は理解できました。

apply と call は同じ機能ですが、パラメーターに違いがあります。
最初のパラメータは同じ意味ですが、2 番目のパラメータについては、
apply はパラメータ配列に渡されます。つまり、複数のパラメータが 1 つの配列に結合されて渡され、call は call として使用されます。渡されます (2 番目のパラメーターから始まります)。
たとえば、func.call(func1,var1,var2,var3) に対応する apply の書き込みメソッドは次のとおりです。 func.apply(func1,[var1,var2,var3])

を使用する利点apply は同時に、現在の関数の引数オブ​​ジェクトを apply の 2 番目のパラメータとして直接渡すことができます。

javascript apply 使用法 補足
funObj.apply([thisObj[ ,argArray]])
application 現在のオブジェクトを別のオブジェクトに置き換えるオブジェクトのメソッド。
functionObj のメソッドが実行されると、関数内の this オブジェクトが thisObj に置き換えられます。
thisObj オプション。現在のオブジェクトとして使用されるオブジェクト。
argArray オプション。この関数に渡される引数の配列。
コードをコピー コードは次のとおりです:

//オブジェクトの継承に適用します。プロトタイプを使用し、親オブジェクトのプロパティを子オブジェクトに暗黙的に割り当てます。
function par(name)
{
this.parname=name;
}
function child(chname,parname){
this.chname=chname;
par.apply(this,new Array(parname));
var o=new child("ジョン","ミスター ジョン"); >alert(o.parname ";" o.chname);
//apply は一般的なメソッド呼び出しで使用できます
window.onunload=function()
{
alert(" アンロード イベントは発射されました!");
}
function SayBye(name,toName)
{
alert(name " は bye to " toName);
}
function SayEndBiz( name,toName ,content)
{
alert(name " は " toName" との " content " についての話を終了します);
function addTo(args,func)
{
var oldHandler= window.onunload||function(){};
window.onunload=function()
{
func.apply(window,args); 🎜>}
}
addTo(new Array("John","everyone"),sayBye);
addTo(new Array("John","everyone","会社の開発戦略") ),sayEndBiz)

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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

jQuery日付が有効かどうかを確認しますjQuery日付が有効かどうかを確認しますMar 01, 2025 am 08:51 AM

単純なJavaScript関数は、日付が有効かどうかを確認するために使用されます。 関数isvaliddate(s){ var bits = s.split( '/'); var d = new Date(bits [2] '/' bits [1] '/'ビット[0]); return !!(d &&(d.getmonth()1)== bits [1] && d.getdate()== number(bits [0])); } //テスト var

jQueryは要素のパディング/マージンを取得しますjQueryは要素のパディング/マージンを取得しますMar 01, 2025 am 08:53 AM

この記事では、jQueryを使用して、DOM要素の内側のマージン値とマージン値、特に外側の縁と要素の内側の縁の特定の位置を取得して設定する方法について説明します。 CSSを使用して要素の内側と外側の縁を設定することは可能ですが、正確な値を取得するのは難しい場合があります。 // 設定 $( "div.header")。css( "margin"、 "10px"); $( "div.header")。css( "padding"、 "10px"); このコードはそうだと思うかもしれません

10 jQuery Accordionsタブ10 jQuery AccordionsタブMar 01, 2025 am 01:34 AM

この記事では、10個の例外的なjQueryタブとアコーディオンについて説明します。 タブとアコーディオンの重要な違いは、コンテンツパネルの表示方法と非表示にあります。これらの10の例を掘り下げましょう。 関連記事:10 jQueryタブプラグイン

10 jqueryプラグインをチェックする価値があります10 jqueryプラグインをチェックする価値がありますMar 01, 2025 am 01:29 AM

ウェブサイトのダイナミズムと視覚的な魅力を高めるために、10の例外的なjQueryプラグインを発見してください!このキュレーションされたコレクションは、画像アニメーションからインタラクティブなギャラリーまで、多様な機能を提供します。これらの強力なツールを探りましょう。 関連投稿: 1

ノードとHTTPコンソールを使用したHTTPデバッグノードとHTTPコンソールを使用したHTTPデバッグMar 01, 2025 am 01:37 AM

HTTP-Consoleは、HTTPコマンドを実行するためのコマンドラインインターフェイスを提供するノードモジュールです。 Webサーバー、Web Servに対して作成されているかどうかに関係なく、HTTPリクエストで何が起こっているかをデバッグして正確に確認するのに最適です

カスタムGoogle検索APIセットアップチュートリアルカスタムGoogle検索APIセットアップチュートリアルMar 04, 2025 am 01:06 AM

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

jQueryはscrollbarをdivに追加しますjQueryはscrollbarをdivに追加しますMar 01, 2025 am 01:30 AM

次のjQueryコードスニペットを使用して、Divコンテンツがコンテナ要素領域を超えたときにスクロールバーを追加できます。 (デモンストレーションはありません、それを直接firebugにコピーしてください) // d =ドキュメント // w =ウィンドウ // $ = jQuery var contentarea = $(this)、 wintop = contentarea.scrolltop()、 docheight = $(d).height()、 winheight = $(w).height()、 divheight = $( '#c

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ヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール