Jquery實現(xiàn)$.fn.extend和$.extend函數(shù)
前面我們擴展了bind方法和ready函數(shù),這次我要講一下$.fn.extend 和$.extend函數(shù)。
其他的不多說,直接切入主題吧!
先來看看這兩個函數(shù)的區(qū)別:
$.fn.extend是為查詢的節(jié)點對象擴展方法,是基于$的原型擴展的方法
$.extend是擴展常規(guī)方法,是$的靜態(tài)方法。
我們之前寫的代碼看一下:
(function (win) { var _$ = function (selector, context) { return new _$.prototype.Init(selector, context); } _$.prototype = { Init: function (selector, context) { }, each: function (callback) { } } _$.prototype.Init.prototype = _$.prototype; window.$ = window.JQuery = _$; })(window);
這個是主體的代碼。
我來先來擴展$.fn.extend方法:
這個方法的初衷是我們擴展之后可以用$("").newMetod()這樣訪問,實際上就是給$原型加一個extend方法。這中間的fn其實類似于命名空間的作用,沒什么實際的意義。為的是和 $.extend作區(qū)分。
熟悉原型的其實一看就知道:讓$.fn指向$的原型不就行了?
于是我們就有了下面一段代碼: _$.fn = _$.prototype;
接下來我們就來加上extend方法了:
var isObj = function (o) { return Object.prototype.toString.call(o) === "[object Object]"; } _$.fn.extend = function (obj) { if (isObj(obj)) { for (var i in obj) { this[i] = obj[i]; } } }
這段代碼中isObj的作用是判斷傳入的參數(shù)是不是object對象, _$.fn.extend 這個方法其實和_$.prototype.extend 一樣的,大家看一下,這個代碼可能和JQUERY源碼不太一樣,我是按照自己的意思寫的。
下面我們來實現(xiàn)$.extend方法,剛才已經(jīng)說過了,這個方法其實是為$加一個靜態(tài)方法,代碼如下:
$.extend = function (obj) { if (isObj(obj)) { for (var i in obj) { this[i] = obj[i]; } } }
你會發(fā)現(xiàn)兩個方法是一樣的,不過你仔細琢磨一下,是不一樣的:
_$.fn.extend里面的this其實是代表$.prototype, $.extend 里面的this代表的是$。
這兩個方法我們實現(xiàn)了,奉上全部代碼:
(function (win) { var _$ = function (selector, context) { return new _$.prototype.Init(selector, context); } _$.prototype = { Init: function (selector, context) { }, each: function (callback) { } } _$.prototype.Init.prototype = _$.prototype; _$.fn = _$.prototype; var isObj = function (o) { return Object.prototype.toString.call(o) === "[object Object]"; } _$.fn.extend = function (obj) { if (isObj(obj)) { for (var i in obj) { this[i] = obj[i]; } } } _$.extend = function (obj) { if (isObj(obj)) { for (var i in obj) { this[i] = obj[i]; } } } window.$ = window.JQuery = _$; })(window);
使用方法其實就是
$.fn.extend( { method:function(){ } }) $.extend( { method:function(){ } })
代碼和Jquery源碼不一樣,我這是為了簡化寫的方法,大家主要是要琢磨里面的思想,謝謝大家的閱讀。
相關(guān)文章
jQuery mobile轉(zhuǎn)換url地址及獲取url中目錄部分的方法
這篇文章主要介紹了jQuery mobile轉(zhuǎn)換url地址及獲取url中目錄部分的方法,轉(zhuǎn)換url地址本文中介紹的是將相對url轉(zhuǎn)化為絕對url,需要的朋友可以參考下2015-12-12jquery動態(tài)賦值id與動態(tài)取id方法示例
這篇文章主要給大家介紹了關(guān)于jquery動態(tài)賦值id與動態(tài)取id的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。2017-08-08jquery如何改變html標簽的樣式(兩種實現(xiàn)方法)
對于如何修飾html標簽,這對于js來說,可以通過setAttribute來設(shè)置標簽的屬性,通過getAttribute來得到標簽的屬性,而在jq中當然也可以實現(xiàn)類似的功能,方法上肯定比js要簡化多了,接下來介紹實現(xiàn)方法,感興趣的朋友可以了解下2013-01-01jquery ajax傳遞中文參數(shù)亂碼問題及解決方法說明
本篇文章主要是對jquery ajax傳遞中文參數(shù)亂碼問題及解決方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02jQuery實現(xiàn)限制textarea文本框輸入字符數(shù)量的方法
這篇文章主要介紹了jQuery實現(xiàn)限制textarea文本框輸入字符數(shù)量的方法,涉及jQuery鍵盤事件及頁面元素的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05淺談Jquery中Ajax異步請求中的async參數(shù)的作用
下面小編就為大家?guī)硪黄獪\談Jquery中Ajax異步請求中的async參數(shù)的作用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06