ホームページ ウェブフロントエンド jsチュートリアル jqueryでコア関数インスタンスを解析する

jqueryでコア関数インスタンスを解析する

Jun 17, 2017 pm 05:49 PM
jquery 深さ 解析する

コア関数には以下が含まれます:

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 を再帰的に呼び出すことを可能にします

3、拡張オブジェクト メソッドと静的メソッドの原則を拡張します

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 < length; i++ ) {//可能有多个对象扩展到第一个对象上
        // Only deal with non-null/undefined values
        if ( (options = arguments[ i ]) != null ) {//options是一个对象
            // Extend the base object
            for ( name in options ) {
                src = target[ name ];  //src是target里已经存在的value(也可能不存在)
                copy = options[ name ];//copy是待合入的一个value

                // 防止循环引用  Prevent never-ending loop
                if ( target === copy ) {//例如:var a={};$.extend(a,{name:a});//可能导致循环引用
                    continue;
                }

                // if是深复制else是浅复制  Recurse if we're merging plain objects or arrays
                if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
                    if ( copyIsArray ) {
                        copyIsArray = false;
                        clone = src && jQuery.isArray(src) ? src : [];

                    } else {
                        clone = src && jQuery.isPlainObject(src) ? src : {};
                    }

                    // 亮了,直至剥离至最深一层非对象类型,而且是逐个。Never move original objects, clone them
                    target[ name ] = jQuery.extend( deep, clone, copy );

                // Don't bring in undefined values
                } else if ( copy !== undefined ) {
                    target[ name ] = copy;//target[ name ] = options[ name ];
                }
            }
        }
    }

    // Return the modified object
    return target;
};
ログイン後にコピー

jQuery.extend({…}) 分析

書き方を見てみよう

jQuery.extend({

prop : ””

method:function(){}

});

これらのメソッドは jQuery の静的プロパティおよびメソッド (つまり、ツール メソッド) であることがわかります。将来的には、それらを直接提供できるようになります。ユーザー向け、または内部使用向け。

特定の実装されたツールの属性とメソッドは (内部的に使用されるものもマークされています)

jquery.extend({

待機:内部)を待つファイルの数のカウンター(内部)holdready():dom trigger ready():dom triggerを準備

isfunction():それがそうであるかどうかfunction

Isarray (): 配列かどうか

type()
例外がスローされました


parseHTML() () : JS

のグローバル解析
CamelCase() : キャメルケースを変換

nodeName() : 指定されたノード名 (内部) かどうか

each() : コレクションを走査

Trim() : 先頭と末尾のスペースを削除
makeArray() : クラス配列を実数配列に変換
inArray () : グループのバージョン番号indexOf
これを

を指すように変更します access() : 多機能値操作(内部)

now() : 現在時刻 swap() : CSSスワップ(内部)

} );

jQuery.ready.promise = function(){}; DOMの非同期操作を監視(内部)

function isArraylike(){} 配列状の判定(内部)

以上がjqueryでコア関数インスタンスを解析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

Oracle エラー 3114 の詳細な説明: 迅速に解決する方法 Oracle エラー 3114 の詳細な説明: 迅速に解決する方法 Mar 08, 2024 pm 02:42 PM

Oracle エラー 3114 の詳細な説明: 迅速に解決する方法、具体的なコード例が必要です Oracle データベースの開発および管理中に、さまざまなエラーが頻繁に発生しますが、その中でもエラー 3114 は比較的一般的な問題です。エラー 3114 は通常、データベース接続に問題があることを示します。これは、ネットワーク障害、データベース サービスの停止、または不適切な接続文字列設定が原因である可能性があります。この記事では、エラー 3114 の原因とこの問題を迅速に解決する方法を詳しく説明し、特定のコードを添付します

PHPにおけるmidpointの意味と使い方の分析 PHPにおけるmidpointの意味と使い方の分析 Mar 27, 2024 pm 08:57 PM

【PHPにおけるミッドポイントの意味と使い方の分析】 PHPでは、ミッドポイント(.)は2つの文字列やオブジェクトのプロパティやメソッドを接続するためによく使われる演算子です。この記事では、PHP における中間点の意味と使用法を詳しく掘り下げ、具体的なコード例を示して説明します。 1. 文字列中間点演算子の接続 PHP での最も一般的な使用法は、2 つの文字列を接続することです。 2 つの文字列の間に . を置くと、それらをつなぎ合わせて新しい文字列を形成できます。 $string1=&qu

解析ワームホール NTT: あらゆるトークンのオープン フレームワーク 解析ワームホール NTT: あらゆるトークンのオープン フレームワーク Mar 05, 2024 pm 12:46 PM

Wormhole は、ブロックチェーンの相互運用性のリーダーであり、所有権、制御、許可のないイノベーションを優先する、回復力があり、将来性のある分散システムの作成に重点を置いています。このビジョンの基盤は、技術的専門知識、倫理原則、コミュニティの連携への取り組みであり、シンプルさ、明確さ、そして幅広いマルチチェーン ソリューションで相互運用性の状況を再定義します。ゼロ知識証明、スケーリング ソリューション、機能豊富なトークン標準の台頭により、ブロックチェーンはより強力になり、相互運用性の重要性がますます高まっています。この革新的なアプリケーション環境では、新しいガバナンス システムと実用的な機能が、ネットワーク全体の資産に前例のない機会をもたらします。プロトコル構築者は現在、この新たなマルチチェーンでどのように運用するかに取り組んでいます。

Win11の新機能分析:Microsoftアカウントへのログインをスキップする方法 Win11の新機能分析:Microsoftアカウントへのログインをスキップする方法 Mar 27, 2024 pm 05:24 PM

Win11 の新機能の分析: Microsoft アカウントへのログインをスキップする方法 Windows 11 のリリースにより、多くのユーザーは、Windows 11 がより便利で新しい機能をもたらしたことに気づきました。ただし、ユーザーによっては、自分のシステムが Microsoft アカウントに関連付けられることを好まず、この手順をスキップしたい場合があります。この記事では、ユーザーが Windows 11 で Microsoft アカウントへのログインをスキップし、よりプライベートで自律的なエクスペリエンスを実現するのに役立ついくつかの方法を紹介します。まず、一部のユーザーが Microsoft アカウントにログインすることに抵抗がある理由を理解しましょう。一方で、一部のユーザーは次のことを心配しています。

jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する Feb 28, 2024 pm 09:06 PM

タイトル: jQuery ヒント: ページ上のすべての a タグのテキストをすばやく変更する Web 開発では、ページ上の要素を変更したり操作したりする必要がよくあります。 jQuery を使用する場合、ページ内のすべての a タグのテキスト コンテンツを一度に変更する必要がある場合があります。これにより、時間と労力を節約できます。以下では、jQuery を使用してページ上のすべての a タグのテキストをすばやく変更する方法と、具体的なコード例を紹介します。まず、jQuery ライブラリ ファイルを導入し、次のコードがページに導入されていることを確認する必要があります: &lt

jQuery を使用してすべての a タグのテキスト コンテンツを変更する jQuery を使用してすべての a タグのテキスト コンテンツを変更する Feb 28, 2024 pm 05:42 PM

タイトル: jQuery を使用して、すべての a タグのテキスト コンテンツを変更します。 jQuery は、DOM 操作を処理するために広く使用されている人気のある JavaScript ライブラリです。 Web 開発では、ページ上のリンク タグ (タグ) のテキスト コンテンツを変更する必要が生じることがよくあります。この記事では、この目標を達成するために jQuery を使用する方法を説明し、具体的なコード例を示します。まず、jQuery ライブラリをページに導入する必要があります。 HTML ファイルに次のコードを追加します。

Apache2 は PHP ファイルを正しく解析できません Apache2 は PHP ファイルを正しく解析できません Mar 08, 2024 am 11:09 AM

スペースの制限のため、以下は簡単な記事です。Apache2 は一般的に使用されている Web サーバー ソフトウェアであり、PHP は広く使用されているサーバー側スクリプト言語です。 Web サイトを構築する過程で、Apache2 が PHP ファイルを正しく解析できず、PHP コードの実行が失敗するという問題が発生することがあります。この問題は通常、Apache2 が PHP モジュールを正しく構成していないこと、または PHP モジュールが Apache2 のバージョンと互換性がないことが原因で発生します。この問題を解決するには通常 2 つの方法があります。1 つは次のとおりです。

XML 解析用の Java ライブラリの比較: 最適なソリューションを見つける XML 解析用の Java ライブラリの比較: 最適なソリューションを見つける Mar 09, 2024 am 09:10 AM

はじめに XML (Extensible Markup Language) は、データを保存および送信するための一般的な形式です。 Java での XML の解析は、データ交換からドキュメント処理に至るまで、多くのアプリケーションにとって必要なタスクです。 XML を効率的に解析するために、開発者はさまざまな Java ライブラリを使用できます。この記事では、開発者が情報に基づいた選択を行えるよう、機能、機能、パフォーマンスに焦点を当てて、最も人気のある XML 解析ライブラリのいくつかを比較します。 DOM (Document Object Model) 解析ライブラリ JavaXMLDOMAPI: Oracle が提供する標準 DOM 実装。開発者が XML ドキュメントにアクセスして操作できるようにするオブジェクト モデルを提供します。 DocumentBuilderFactoryfactory=D

See all articles