ホームページ > ウェブフロントエンド > jsチュートリアル > jQueryのソースコード解析メモ(4) 準備完了 function_jquery

jQueryのソースコード解析メモ(4) 準備完了 function_jquery

WBOY
リリース: 2016-05-16 18:06:11
オリジナル
1004 人が閲覧しました

この関数は、jQuery ドキュメントで 3 つの同等の形式で記述されています:

コードをコピー コードは次のとおりです:

// jQuery.fn.ready で定義
$(document).ready(handler);
// 前のものと同じですが、推奨されません
$().ready (handler) );
// jQuery オブジェクト内で
$(handler) を単独で処理します。
// 上記の形式の定義:
if(jQuery.isFunction(selector) { return rootjQuery.ready(selector);
}

つまり、実際には 1 つの形式になります: jQuery.fn.ready(fn) は次のように定義されます。

コードをコピー コードは次のとおりです: ready: function(fn) {
// イベントをバインドしますDOM
jQuery.bindReady();
// コールバック関数をトリガーします
readyList.done(fn);
// jQuery オブジェクトを返します
}


実際には、jQuery 内に fn への参照が 1 つだけあるわけではありません。ここでは Deferred 関数が使用されています。75 行目で、readyList メンバーが jQuery オブジェクトに対して定義されており、この変数は、bindReady 関数で初期化されています。 >


コードをコピーします
コードは次のとおりです。 if(readyList) { return }
readyList = jQuery._Deferred();


readyList の初期化に加えて、bindReady 関数は主に、バインディング イベントについて、IE が使用するブラウザと addEventHandler を使用するブラウザの違いを処理します。完了後、ready 関数は、readyList.resolveWith を使用してコールバック関数をトリガーします。この作業に加えて、この API の機能は、ready イベントのコールバックを遅延させることです。このフラグが設定されている場合、ready は、readyList.resolveWith を呼び出す前に setTimeout(jQuery.ready, 1) を呼び出し続けます。つまり、一定時間ごとに再帰的に自分自身を呼び出します (保持時間が長いと JS エンジンがオーバーフローするかどうかはわかりません)。そのため、holdReady によって最終的に解放されると、コール スタックに沿って setTimeout が戻ってきます。このスタックが完了する前に Ready コールバック関数をトリガーしないようにするため。 setTimeout が呼び出されるたびに、readyWait 変数が増加します。 holdReady 関数によって遅延された通話の数を示すために使用されます。


###いくつかの基本的な補助関数
543 行目から、parseJSON、parseXML、globalEval といういくつかの注目すべき補助関数が定義されています。 parseJSON は文字列を JSON オブジェクトに変換します。通常は eval を使用します。 parseJSON はこの操作をカプセル化しますが、eval は最後の手段として使用されます。最新の JavaScript 標準では、JSON シリアル化 API と逆シリアル化 API が追加されているためです。ブラウザがこの標準をサポートしている場合、これら 2 つの API はネイティブ コードを使用して JS エンジンに実装され、効率は明らかに eval よりもはるかに高くなります。現在、Chrome と Firefox4 の両方がこの API をサポートしています。 parseJSON は次のように使用されます:




コードをコピー
コードは次のとおりです: // ネイティブJSON API。逆シリアル化は JSON.stringify(object) if(window.JSON && window.JSON.parse) { return window.JSON.parse(data);
}
// おおよそです。文字列の正当性を確認してください
return (new Function("return " data))();


parseXML 関数も主に標準 API と IE のパッケージです。標準 API は DOMParser オブジェクトです。 IE は Microsoft.XMLDOM の ActiveXObject オブジェクトを使用します。定義:



コードをコピー
コードは次のとおりです。 if(window.DOMParser) { tmp = new DOMParser(); xml = tmp.parseFromString(data, "text/xml");
} else {
xml = new ActiveXObject("Microsoft.XMLDOM"); 🎜>xml .async = "false";
xml.loadXML(data);
}


globalEval 関数はスクリプトをグローバル コンテキストに読み込みます。 window.execScriptはIEで使用できます。他のブラウザでは eval を使用する必要があります。 jQuery コード全体が匿名関数全体であるため、現在のコンテキストは jQuery です。メインコード:



コードをコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート