13

jQuery のコールバックやフックとは何かを正確に概念化するのに苦労しています。ひとまとめにされているようですが、違いがわかりません。

thisのようなコールバックに関する他の投稿から私が理解していることから、コールバックは、B が完了したら A を呼び出す別の関数 B に渡す関数 A です。(それは完全に間違っている可能性があります。そうであれば訂正してください)。

「フック/コールバックを使用する必要があります」というステートメントを除いて、フックについてはまったく考えていません。そんなに似ているのか疑問に思うところが…

4

2 に答える 2

15

あなたの定義は近いですが不十分です。コールバックは、B が適切な時点で呼び出す別の関数 B (またはオブジェクト B) に渡す関数 A です。

一部の機能では、説明したように、「適切なポイント」はその機能が完了した後です。

多くの関数またはオブジェクトは、コールバックを起動できる一連の「特定のポイント」またはイベントを定義します。たとえば、AJAX を介して定期的に自分自身を更新するコントロールがある場合、更新しようとしているときに発生するイベント、更新が​​戻った後に発生するイベント、および結果が表示された後に発生するイベントを定義できます。これらのイベントのいずれについても、そのイベントが発生したときに呼び出されるカスタム関数を渡すことができます。

カスタム関数が呼び出される可能性のある定義済みの一連のポイントは、人々が「フック」と呼んでいるものです。それらは、機能を事前構築済みライブラリにフックできる場所です。

追加するために編集:

OP は、フックの簡単な例を求めました。

ユーザー名のリストを取得し、リストを調べて各人の詳細を検索し、人物オブジェクトの入力済みリストを返すように設計された関数を作成したとします。

私の関数を利用しているプログラマーが、私のデータベースにユーザー名が見つからない場合にどうするべきかを指定できるようにしたいのかもしれません。関数でエラーを発生させたいプログラマーもいれば、欠落している例を無視したいプログラマーもいれば、別のデータベースを調べたいプログラマーもあれば、空の人物オブジェクトを構築したいプログラマーもいるでしょう。

だから私の関数の署名は次のようなものかもしれません

function getPeople( arrayOfUsernames, missingUsernameCallback )

関数内で、データで見つからないユーザー名に到達するたびに、呼び出すだけです

missingUsernameCallback( notFoundUsername );

これで、プログラマーは次のように関数を呼び出すことができます

getPeople( ["adam","betty","charlie"], function(name){ alert("Missing username " + name)} );

不足しているユーザー名にヒットするたびに、渡された関数を呼び出します。

より複雑なケースでは、複数のコールバック関数を含むオブジェクトを受け入れる必要がある場合があるため、次のように呼び出すことができます

   getPeople( ["adam","betty","charlie"], 
        {startOfListCallback:      function(){ alert("I'm starting the list")},
         missingUsernameCallback:  function(){ alert("Missing username"!)},
         endOfListCallback:        function(){ alert("I'm at the end of the list") });

可能なコールバックのリストは関数によって定義され、API ドキュメントに記載されている必要があります (コールバックなどに渡すことができるパラメーターと共に)。そのコールバックのリストがフックです。

于 2011-07-18T15:31:53.853 に答える
1

使用された人々という言葉がコールバックを意味するのを見たことがある文脈では、それはまさにあなたが思っているものだと思います(jQueryの場合、フックとコールバックは同じものです)。

たとえば、jQuery の animate() 関数のコールバックは、アニメーションが完了するとすぐに実行されます。

一部の組み込み関数やその他の jQuery プラグインは、実行のさまざまな段階に対して複数のコールバックを定義する場合があります。たとえば、ユーザーにポップアップ ボックスを表示するプラグインは、ユーザーがリンクをクリックしてボックスを表示するときのコールバックを持っている場合がありますが、ボックスが実際に表示される前です (このコールバックは、実際のポップアップが表示するデータを保存するために使用できます)。必要があります)。ボックスが再び閉じられたときに、同じポップアップ関数がコールバック関数を実行することもあります。このコールバックは、ページを変更したり、データを保存したりするために使用できます。

于 2011-07-18T15:29:41.027 に答える