麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

jQuery.fn和jQuery.prototype區(qū)別介紹

2019-11-20 21:55:13
字體:
供稿:網(wǎng)友
近期在讀jQuery的源碼。

發(fā)現(xiàn)這里有個東西很難理解。

這里的 jQuery , jQuery.fn , jQuery,fn,init ,jQuery,prototype 都代表什么。

來看下jQuery的源碼是怎么樣定義的:
復(fù)制代碼 代碼如下:

(function( window, undefined ) {

var jQuery = (function() {
// 構(gòu)建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 ) {
// something to do
}
};

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

// 合并內(nèi)容到第一個參數(shù)中,后續(xù)大部分功能都通過該函數(shù)擴(kuò)展
// 通過jQuery.fn.extend擴(kuò)展的函數(shù),大部分都會調(diào)用通過jQuery.extend擴(kuò)展的同名函數(shù)
jQuery.extend = jQuery.fn.extend = function() {};

// 在jQuery上擴(kuò)展靜態(tài)方法
jQuery.extend({
// something to do
});

// 到這里,jQuery對象構(gòu)造完成,后邊的代碼都是對jQuery或jQuery對象的擴(kuò)展
return jQuery;

})();

window.jQuery = window.$ = jQuery;
})(window);

這里我們可以看到:
復(fù)制代碼 代碼如下:

var jQuery = function( selector, context ) {
return new jQuery.fn.init( selector, context, rootjQuery );
}

jQuery 其實jQuery.fn.init()返回一個對象。那么jquery.fn.init()返回的又是什么呢?
復(fù)制代碼 代碼如下:

jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
// something to do
}
};

就是從這里來的,一個javascript對象。

這里有個問題。
復(fù)制代碼 代碼如下:

jQuery.fn = jQuery.prototype

那么就是 將jQuery 的原型對象賦值給了 jQuery.fn。

再看下面:
復(fù)制代碼 代碼如下:

jQuery.fn.init.prototype = jQuery.fn;

看到這里我有一個想法。就是 將jQuery.fn 給了 jQuery.fn.init.prototype.

那么在這之前jQuery.fn.init.prototype.是什么?

是不是沒有?這個時候它的原型是{};

那么為了可以去調(diào)用init外面的方法。就做了一個處理。

將jQuery.fn 賦值給jQuery.fn.init.prototype.這樣的話,

jQuery.fn.init.prototype的原型也就是jQuery的原型對象就是 jQuery.fn ( 注意jQuery = function(return new jQuery.fn.init()))。

賦值了以后。在調(diào)用的時候,當(dāng)init中沒有方法的時候,就會去原型函數(shù)中調(diào)用。

那么這樣的話。

你可能會想到這樣一個東東:
復(fù)制代碼 代碼如下:

jQuery.extends()
jQuery.fn.extends()

我想你應(yīng)該明白它們的區(qū)別了吧。

jQuery.extends()是直接擴(kuò)展jQuery.而jQuery.fn.extends(),很明顯是擴(kuò)展的原型。

這就是為什么jQuery.fn.extends()中的大部分方法來自己于jQuery.extends()。

這里又將 jQuery.fn 賦值給了 jQuery.fn.init.prototype.

那么就有這樣的一個關(guān)系:
復(fù)制代碼 代碼如下:

jQuery.prototype = jQuery.fn = jQuery.fn.init.prototype
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 草草视频免费 | 精品国产一二区 | 免费国产不卡午夜福在线 | 久久影院午夜 | 草免费视频 | 成人三级免费电影 | 高清成人在线 | 欧美成人激情在线 | 成年免费观看视频 | 在线看小早川怜子av | 久久精品2019中文字幕 | 中文字幕激情 | 草草久 | 欧美日韩免费一区 | 国产精品jk白丝蜜臀av软件 | 午夜丰满少妇高清毛片1000部 | 国产成人在线观看免费 | 色妞视频男女视频 | 毛片免费在线播放 | 嫩草91在线 | 欧美性生交大片 | 羞羞的 | 久久久久免费电影 | 亚洲欧美日韩中文在线 | 成人在线观看免费观看 | 海角在线观看91一区二区 | 国产88久久久国产精品免费二区 | 色诱亚洲精品久久久久久 | av免费在线网 | 成人小视频在线播放 | 亚洲国产精品一区二区三区 | 国产一级做a | 九九热精 | 有兽焉免费动画 | 全黄性性激高免费视频 | 草草视频免费 | 中文在线观看视频 | 高清国产午夜精品久久久久久 | 欧美精品一区二区久久 | 日韩激情在线视频 | 欧美视频国产 |