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

JavaScript_javascript スキルにおける apply と call の使い方、意味、違い

May 16, 2016 pm 06:30 PM
apply

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 までご連絡ください。

ホット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

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

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のパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

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

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

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

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

シンプルな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