摘要:利用了這一特性,通過在構(gòu)造函數(shù)內(nèi)部用運(yùn)算符創(chuàng)建并返回另一個構(gòu)造函數(shù)的實例,因此當(dāng)我們創(chuàng)建對象的時候,可以使用的形式,也可以省略運(yùn)算符,直接通過的形式得到對象。
jQuery總體結(jié)構(gòu)
1 (function(window, undefined){ 2 3 var jQuery = (function(){ 4 var jQuery = function(selector, context){ 5 return new jQuery.fn.init(selector, context, rootjQuery); 6 }, 7 8 jQuery.fn = jQuery.prototype = { 9 constructor: jQuery, 10 init: function(selector, context, rootjQuery){ ... }, 11 // 一些原型屬性和方法 12 }; 13 jQuery.fn.init.prototype = jQuery.fn; 14 jQuery.extend = jQuery.fn.textend = function() {...}; 15 jQuery.extend({ 16 // 一堆靜態(tài)屬性和方法 17 }); 18 19 return jQuery; 20 })(); 21 22 window.jQuery = window.$ = jQuery; 23 })(window)具體分析
為什么要在構(gòu)造函數(shù)jQuery內(nèi)部(第4行)內(nèi)部用運(yùn)算符new創(chuàng)建并返回另一個構(gòu)造函數(shù)的實例?
通常我們創(chuàng)建一個對象或?qū)嵗姆绞绞窃谶\(yùn)算符new后緊跟一個構(gòu)造函數(shù),但是如果構(gòu)造函數(shù)有返回值,運(yùn)算符new所創(chuàng)建的對象就會被丟棄,返回值將作為new表達(dá)式的值。
jQuery利用了這一特性,通過在構(gòu)造函數(shù)jQuery內(nèi)部用運(yùn)算符new創(chuàng)建并返回另一個構(gòu)造函數(shù)的實例,因此當(dāng)我們創(chuàng)建jQuery對象的時候,可以使用new jQuery(selector)的形式,也可以省略運(yùn)算符,直接通過jQuery(selector)的形式得到j(luò)Query對象。
為什么通過jQuery方法創(chuàng)建出來的對象(實際上并不是jQuery方法創(chuàng)建的,是有jQuery原型對象中的init方法創(chuàng)建的),能夠訪問jQuery原型對象上的方法和屬性?
在代碼的第8行,我們可以看到j(luò)Query的原型中包含init方法,該方法是創(chuàng)建jQuery對象時真正調(diào)用的方法。在代碼的第13行,將init方法的原型對象重寫為jQuery的原型對象,因此由init創(chuàng)建出來的對象能夠訪問jQuery原型對象上的屬性和方法
為什么在第8行執(zhí)行jQuery.fn = jQuery.prototype?
jQuery.fn是jQuery.prototype的簡寫,可以少些7個字母,方便拼寫
jQuery.extend和jQuery.fn.textend方法有什么作用?
jQuery.extend = jQuery.fn.extend = function([deep,] target, object1 [,objectN]){ .... }
jQuery.extend和jQuery.fn.textend方法用于合并兩個或多個對象的屬性到第一個對象,其中,參數(shù)deep是可選的布爾值,表示是否進(jìn)行深度合并(即遞歸合并),合并行為默認(rèn)是不遞歸的。參數(shù)target是目標(biāo)對象,參數(shù)object1和objectN是源對象;如果僅提供了一個對象,則意味著參數(shù)target被忽略,此時jQuery或jQuery.fn被當(dāng)做目標(biāo)對象。通過這種方式可以在jQuery或jQuery.fn上添加新的屬性和方法,jQuery的其他模塊大都是這么實現(xiàn)的。
jQuery.fn和jQuery上的方法有什么不同
jQuery.fn和jQuery上的方法是不同的,jQuery.fn上的方法指的是jQuery原型對象中定義的方法,jQuery上的方法指的是jQuery作為一個Function類型的對象,它的方法屬性。
例如調(diào)用$(document).ready(.....)時,ready是定義在jQuery.fn上的方法
例如調(diào)用jQuery.ajax(...)時,ajax是定義在jQuery上的方法
jQuery是如何實現(xiàn)鏈?zhǔn)秸{(diào)用的
在一些方法中,在最后會返回處理的結(jié)果,如果這個結(jié)果是jQuery對象,就可以在調(diào)用該方法時,在該方法的后面直接調(diào)用其他jQuery相關(guān)的方法,實現(xiàn)鏈?zhǔn)秸{(diào)用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88310.html
摘要:四監(jiān)聽套接字的使用假設(shè)此處我們使用作為事件處理模塊在增加事件時用戶可以使用中的字段當(dāng)事件發(fā)生時該字段也會帶回。在創(chuàng)建監(jiān)聽套接字時將結(jié)構(gòu)分為級監(jiān)聽套接字地址各級都是一對多的關(guān)系。 施洪寶 一. 基礎(chǔ) nginx源碼采用1.15.5 后續(xù)部分僅討論http中的listen配置解析以及優(yōu)化流程 1.1 概述 假設(shè)nginx http模塊的配置如下 http{ server { ...
摘要:前面我們通過幾個數(shù)值展示了幾個比較經(jīng)典的網(wǎng)絡(luò)的一些特性,下面我們就花一點(diǎn)時間來仔細(xì)觀察網(wǎng)絡(luò)的變化,首先是在網(wǎng)絡(luò)結(jié)構(gòu)上的一些思考,其次是對于單層網(wǎng)絡(luò)內(nèi)部的擴(kuò)展,最后我們再來看看對于網(wǎng)絡(luò)計算的改變。和這類結(jié)構(gòu)主要看中的是模型在局部的擬合能力。 前面我們通過幾個數(shù)值展示了幾個比較經(jīng)典的網(wǎng)絡(luò)的一些特性,下面我們就花一點(diǎn)時間來仔細(xì)觀察CNN網(wǎng)絡(luò)的變化,首先是VGG在網(wǎng)絡(luò)結(jié)構(gòu)上的一些思考,其次是Ince...
摘要:是一個輕巧的框架它實現(xiàn)了數(shù)據(jù)的雙向綁定并提供一些基本的指令幫助你提升效率,比如,,,,是的,如你所見,以開頭的指令是它的獨(dú)特標(biāo)識行左右的代碼量,讓應(yīng)用的開發(fā)和加載的一瞬完成倉庫啟動首先我們來看一下是如何啟動的是的掛載點(diǎn),它決定在多大范圍的樹 showImg(https://segmentfault.com/img/remote/1460000012478667?w=1920&h=926...
閱讀 3647·2023-04-26 02:32
閱讀 3947·2021-11-23 10:05
閱讀 2304·2021-10-08 10:04
閱讀 2731·2021-09-22 16:06
閱讀 3626·2021-09-22 15:27
閱讀 776·2019-08-30 15:54
閱讀 1728·2019-08-30 13:50
閱讀 2713·2019-08-29 13:56