最近jQueryのソースコードを読んでいます。
ここで理解するのが難しいことに気づきました。
ここでの jQuery、jQuery.fn、jQuery,fn、init、jQuery、prototype は何を表しますか。
jQuery のソース コードがどのように定義されているかを見てみましょう:
(function( window, unknown ) {
var jQuery = (function() {
// jQuery オブジェクトを構築します
var jQuery = function( selector, context ) {
return new jQuery.fn.init( selector, context, rootjQuery );
}
// jQuery オブジェクト プロトタイプ
jQuery.fn = jQuery.prototype = {
constructor: jQuery ,
init: function( selector, context, rootjQuery ) {
// 何かをする
}
}// init 関数に jQuery を与えます。後のインスタンス化のためのプロトタイプ
jQuery.fn.init.prototype = jQuery.fn;
// コンテンツを最初のパラメーターにマージし、後続のほとんどの関数はこの関数を通じて拡張されます
// jQuery を通じて。 fn .extend によって拡張された関数のほとんどは、jQuery.extend によって拡張された同じ名前の関数を呼び出します。
jQuery.extend = jQuery.fn.extend = function() {};
// Expand static on jQuery Method
jQuery.extend({
// 何かすること
});
// この時点で、jQuery オブジェクトの構築が完了し、次のコードはjQuery または jQuery オブジェクトの場合 Extension
return jQuery;
window.jQuery = window.$ = jQuery;
コードをコピー
コードは次のとおりです:
コードをコピー
コードは次のとおりです。
はここから来ています。 , JavaScript オブジェクト。
ここで問題が発生しました。
コードをコピー
コードは次のとおりです。
コードをコピーします
コードは次のとおりです:
そうですよね?現時点では、そのプロトタイプは
であるため、init の外部でメソッドを呼び出すことができます。手続きをしただけです。
jQuery.fn.init.prototype に jQuery.fn を代入します。この場合、
jQuery.fn.init.prototype のプロトタイプ、つまり jQuery のプロトタイプ オブジェクトは jQuery です。 .fn (jQuery = function(return new jQuery.fn.init()) に注意してください)。
値を割り当てた後。呼び出す際、initにメソッドがない場合はプロトタイプ関数内で呼び出されます。
その場合。
次のようなことを考えるかもしれません:
コードをコピーします
コードは次のとおりです:
jQuery.extends() は jQuery を直接拡張し、jQuery.fn.extends() は明らかに拡張されたプロトタイプです。
これが、jQuery.fn.extends() のメソッドのほとんどが jQuery.extends() から派生した理由です。
ここでは、jQuery.fn が jQuery.fn.init.prototype に割り当てられています。
このような関係があります。
コピーcode
コードは次のとおりです。
jQuery.prototype = jQuery.fn = jQuery.fn.init.prototype