javascript 物件合併程式碼例項簡單分析
本章節分享一段程式碼例項,它實現了物件合併的效果。
其實模擬子jquery的原始碼,當然比原始碼稍微精簡一下,具有一定的實用效果。
下面就給出程式碼,並進行一定的分析,感興趣的朋友可以做一下參考。
關於物件合併更多內容可以參閱javascript深度拷貝和淺拷貝簡單介紹一章節。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼(function () { var Q= (function () { var Q = function () { return Q.fn.init(); }; Q.fn = Q.prototype = { init: function () { return this; } }; Q.extend = Q.fn.extend = function () { var options, name, src, copy, target = arguments[0] || {}, index = 1, length = arguments.length; if (length === index) { target = this; --index; } for (; index < length; index++) { if ((options = arguments[index]) != null) { for (name in options) { src = target[name]; copy = options[name]; if (src === copy) { continue; } if (copy !== undefined) { target[name] = copy; } } } } return target; } return Q; })(); window.Q = window.$ = Q(); })();
上面的程式碼可以實現物件的合併拷貝效果,下面就做一下程式碼註釋:
一.程式碼註釋:
(1).(function () {})(),這是一個匿名自執行函式。
(2).var Q= (function () {})(),這也是一個匿名自執行函式,會返回一個值並賦值給變數Q,返回值是一個函式物件。
(3).var Q = function () {
return Q.fn.init();
},宣告一個函式,返回值是一個Q.fn.init()方法的返回值,通常init()函式式進行一些初始化操作的,這裡暫且不管。
(4).Q.fn = Q.prototype = {
init: function () {
return this;
}
},Q.fn指向的是Q的圓形物件,原型物件中有一個init()方法,返回值是this。
(5).Q.extend = Q.fn.extend = function () {},為Q函式度物件本身和Q函式的原型新增一個extend方法。
(6).var options, name, src, copy,宣告的這幾個變數的作用後面會介紹。
(7).target = arguments[0] || {},將函式的第一個引數賦值給變數target中,如果不存在,那麼賦值為{}。
其他物件會被合併到target物件之上。
(8).index = 1, length = arguments.length,宣告一個變數賦值為1,並且將傳遞的實引數量儲存在變數length中。
(9).if (length === index) {
target = this;
--index;
},如果length值等於index值,其實這種情況也就出現在只有一個引數的時候。
於是就將target賦值為this,這個this也許是Q本身,也許是Q的物件例項。
最後index的值減1。
這個語句的作用其實就是判斷如果只有一個引數,例如Q.extend(obj),就會將obj合併到Q物件本身。
(10).for (; index < length; index++) {},使用for迴圈進行遍歷操作。
(11).if ((options = arguments[index]) != null) ,判斷 arguments[index]是否等於null。
(12).for (name in options) {
src = target[name];
copy = options[name];
if (src === copy) {
continue;
}
if (copy !== undefined) {
target[name] = copy;
}
},如果arguments[index]不等於null,也就是傳遞至了,就進行遍歷操作。
判斷當前物件是否具有指定的屬性,如果有,略過,如果沒有,那麼就新增此屬性。
(13).return target,返回合併後的物件。
二.相關閱讀:
(1).prototype可以參閱javascript prototype原型一章節。
(2).arguments可以參閱javascript arguments一章節。
(3).===可以參閱javascript的三個等號(===)一章節。
相關文章
- css合併減少重複程式碼簡單例項CSS單例
- td單元格合併程式碼例項
- javascript閉包簡單程式碼例項JavaScript
- javascript作用域簡單例項程式碼JavaScript單例
- JavaScript 動畫效果簡單例項程式碼JavaScript動畫單例
- table表格單元格合併程式碼例項
- JavaScript簡單的日曆效果程式碼例項JavaScript
- javascript實現的合併兩個陣列程式碼例項JavaScript陣列
- javascript名稱空間使用簡單程式碼例項JavaScript
- javascript判斷奇數簡單程式碼例項分享JavaScript
- javascript閉包的應用簡單程式碼例項JavaScript
- javascript實現的動畫效果簡單例項程式碼JavaScript動畫單例
- javascript物件導向繼承的簡單例項JavaScript物件繼承單例
- JavaScript陣列合並程式碼例項JavaScript陣列
- javascript實現的簡單驗證碼效果程式碼例項JavaScript
- javascript求餘和除法運算簡單例項程式碼JavaScript單例
- javascript獲取字串的hash值簡單程式碼例項JavaScript字串
- javascript判斷物件是否為空物件程式碼例項JavaScript物件
- javascript物件導向相關程式碼例項JavaScript物件
- PE結構-合併節(附例項程式碼)
- jQuery合併兩個陣列程式碼例項jQuery陣列
- js合併兩個陣列程式碼例項JS陣列
- 表格實現標題合併程式碼例項
- js選項卡簡單程式碼例項JS
- JavaScript 表單驗證程式碼例項JavaScript
- table表格單元格橫向和屬性合併程式碼例項
- javascript實現的圖片簡單切換程式碼例項JavaScript
- javascript引用型別資料特點簡單程式碼例項JavaScript型別
- javascript顛倒陣列元素順序簡單程式碼例項JavaScript陣列
- javascript事件冒泡簡單例項JavaScript事件單例
- javascript this用法和簡單例項JavaScript單例
- js map集合簡單程式碼例項JS
- JSON簡單格式程式碼例項JSON
- javascript使用cookie記錄使用者資訊簡單程式碼例項JavaScriptCookie
- javascript動態設定元素的樣式簡單程式碼例項JavaScript
- javascript讀寫二進位制檔案簡單程式碼例項JavaScript
- jQuery表單驗證簡單程式碼例項jQuery
- jQuery實現的簡單投票簡單程式碼例項jQuery