コア関数には以下が含まれます:
jquery の定義方法、呼び出し方法、拡張方法。コア メソッドの実装方法をマスターすることが、jQuery ソース コードを理解する鍵となります。ここですべてが突然明らかになりました。
1、定義方法、つまり入り口
// jQueryのローカルコピーを定義する
var jQuery = function( selector, context ) {
// jQueryオブジェクトは実際には単なるinitコンストラクターです '強化された'
Return new jQuery.fn.init(selector, context, rootjQuery);//jQuery オブジェクトは、jQuery のプロトタイプである jQuery.prototype.init の constructor強化版です
}
2 、および jQuery.fn の関係。 .init
//オブジェクト メソッドを定義します。つまり、$("xx") を通じてのみ呼び出すことができます。
jQuery.fn = jQuery.prototype = {
init:function( selector, context, rootjQuery ) {
return jQuery.makeArray( selector, this );
}
他にもたくさんの プロパティとメソッドがあります ,
プロパティは: jquery、constructor、selector、length
メソッドは: toArray、get、pushStack、each、ready、slice、first、last、eq、map、end、push、sort、splice
…
}
//後のインスタンス化のために init 関数に jQuery プロトタイプを与えます
jQuery.fn.init.prototype = jQuery .fn;
つまり、$("xx") にはインスタンス メソッドがあり、呼び出すことができます。 (jQuery.prototype で定義されたメソッドの呼び出し)
なぜ jQuery は jQuery.fn.init オブジェクトを返すのですか?
jQuery = function( selector, context ) {
// jQuery オブジェクトは実際には単なる init コンストラクターです。 '
return new jQuery.fn.init( selector, context, rootjQuery );
}
jQuery.fn = jQuery.prototype = {
…
}
jQuery.fn.init.prototype = jQuery. fn;
stackoverflow で同様の質問を見つけてください:
http://stackoverflow.com/questions/4754560/help- Understanding-jquerys-jquery-fn-init-why-is-init-in-fn
これも
http://stackoverflow.com/questions/1856890/why-does-jquery-use-new-jquery-fn-init-for-creating-jquery-object-but-i-can/1858537#1858537
私は信じていますコードはこの方法で記述されているため、新しい jQuery オブジェクトをインスタンス化するたびに new キーワードが必要なくなり、オブジェクト構築の背後にあるロジックをプロトタイプに委任することができます。前者は、ライブラリを使いやすくするためのものだと思います。後者は、初期化ロジックを 1 か所にきれいに保持し、渡された引数に正しく一致するオブジェクトを構築して返すために init を再帰的に呼び出すことを可能にします
jQuery .extend = jQuery.fn.extend = function() {
var target = argument[0] || {};
return target;
}
$.extend にほかならない extend を使うと便利です({ }); と $.fn.extend({}); fn を見たときに jQuery.prototype を理解して考えることができれば幸いです。
このスコープをもう一度見てみましょう:
$.extend ->this is $-> this.aa()
$.fn.extend->this is $.fn-> )
拡張実装の詳細を添付:
使用シナリオ:
1、パラメーターを 1 つだけ使用して一部の関数
を拡張します。例: $.extend({f1:function(){},f2:function(){},f3:function(){}})
2、複数のオブジェクトを最初のオブジェクトにマージします
(1) 浅いcopy の場合、最初のパラメータはターゲット オブジェクトです。たとえば
var a = {name:”hello”}
var b = {age:30}
$.extend(a,b);//a={name:”hello”,age:30}
(2) ディープコピー。最初のパラメータは TRUE で、2 番目のパラメータはターゲット オブジェクトです。たとえば、
var a = {name:{job:”it”}};
var b = {name:{age: 30 }};
//$.extend(a,b);
$ . extend(true,a,b);
console.log(a);
jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // 是不是深复制 Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // 不是对象类型 Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // 扩展插件的情况 extend jQuery itself if only one argument is passed if ( length === i ) {//$.extend({f1:function(){},f2:function(){},f3:function(){}}) target = this;//this是$,或是$.fn --i; } for ( ; i <br>jQuery.extend({…}) 分析<p>書き方を見てみよう<br><br>jQuery.extend({</p><p>prop : ””</p><p>method:function(){}</p><p>});</p><p> これらのメソッドは jQuery の静的プロパティおよびメソッド (つまり、ツール メソッド) であることがわかります。将来的には、それらを直接提供できるようになります。ユーザー向け、または内部使用向け。 </p><p>特定の実装されたツールの属性とメソッドは (内部的に使用されるものもマークされています)</p><p>jquery.extend({<br><br>待機:内部)を待つファイルの数のカウンター(内部)<a href="http://www.php.cn/wiki/57.html" target="_blank"></a>holdready()}}}。 <br>タイプ()<br>Exceptionshrown : コレクションを走査します <br><br> Trim() : 先頭と末尾のスペースを削除します <br><br> makeArray() : クラス配列を実数配列に変換します <br><br> inArray() : 番号グループのバージョン IndexOf<br> これを <br><br> access( を指すように変更します) ) : 多機能値操作 (内部) <br><br> now() : 現在時刻 <br><br> swap() : CSS スワップ (内部) <br><br>});<br><br>jQuery.ready.promise = function(){}; の非同期操作を監視します。 DOM (内部)<br><a href="http://www.php.cn/code/5808.html" target="_blank">function isArraylike(){} 配列状の判定(内部)</a></p>
以上がjqueryのコア機能の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
