欧美激情网,国产欧美亚洲高清,欧美屁股xxxxx,欧美群妇大交群,欧美人与物ⅴideos另类,区二区三区在线 | 欧洲

知識(shí)學(xué)堂
  • ·聯(lián)系電話:+86.023-75585550
  • ·聯(lián)系傳真:+86.023-75585550
  • ·24小時(shí)手機(jī):13896886023
  • ·QQ 咨 詢:361652718 513960520
當(dāng)前位置 > 首頁 > 知識(shí)學(xué)堂 > 網(wǎng)站建設(shè)知識(shí)
擴(kuò)展jQuery靜態(tài)方法:extend
更新時(shí)間:2012-06-03 | 發(fā)布人:本站 | 點(diǎn)擊率:599

Jquery的擴(kuò)展方法extend是我們?cè)趯懖寮倪^程中常用的方法,該方法有一些重載原型,在此,我們一起去了解了解。

1. extend(src), 擴(kuò)展jQuery靜態(tài)方法.

也就是說,將src對(duì)象的屬性和方法逐一復(fù)制給jQuery

Java代碼
  1. $.extend({
  2. test:function(){alert('test函數(shù)')}
  3. })
2. extend(dest,src1,src2,src3...srcN) ,合并多個(gè)對(duì)象.

為jQuery.extend(css1,css2)為例,css1,css2各有一些屬性(方法照樣會(huì)如此處理,這里只講屬性).
extend函數(shù)會(huì)把css2有而css2沒有的屬性加到css1中,如果css2的某個(gè)屬性與css1的某個(gè)屬性名稱享用,就會(huì)用css2的屬性去覆蓋css1的同名屬性。css1就是最后的整和對(duì)象;蛘咭部梢杂茫

var newcss = jquery.extend(css1,css2) newcss就是合并的新對(duì)象。

var newcss = jquery.extend({},css1,css2) newcss就是合并的新對(duì)象.而且沒有破壞css1的結(jié)構(gòu)。

Java代碼
  1. //用法: jQuery.extend(obj1,obj2,obj3,..)
  2. ar Css1={size: "10px",style: "oblique"}
  3. var Css2={size: "12px",style: "oblique",weight: "bolder"}
  4. $.jQuery.extend(Css1,Css2)
  5. //結(jié)果:Css1的size屬性被覆蓋,而且繼承了Css2的weight屬性
  6. // Css1 = {size: "12px",style: "oblique",weight: "bolder"}7
3.extend(boolean,dest,src1,src2...),深度鑲套對(duì)象

新的extend()允許你更深度的合并鑲套對(duì)象。下面的例子是一個(gè)很好的證明。

Java代碼
  1. // 以前的 .extend()
  2. jQuery.extend(
  3. { name: “John”, location: { city: “Boston” } },
  4. { last: “Resig”, location: { state: “MA” } }
  5. );
  6. // 結(jié)果:
  7. // => { name: “John”, last: “Resig”, location: { state: “MA” } }
  8. // 新的更深入的 .extend()
  9. jQuery.extend( true,
  10. { name: “John”, location: { city: “Boston” } },
  11. { last: “Resig”, location: { state: “MA” } }
  12. );
  13. // 結(jié)果
  14. // => { name: “John”, last: “Resig”,
  15. // location: { city: “Boston”, state: “MA” } } 1617

與其他的類庫不同的是,jQuery的extend方法提供了“深層拷貝”的功能,如果你傳入的第一個(gè)參數(shù)為boolean型變量,則該變量為深層拷貝的標(biāo)志,第二個(gè)參數(shù)為extend方法的目標(biāo)對(duì)象,其余參數(shù)為需要進(jìn)行繼承的“父類”。如果第一個(gè)參數(shù)的值為true(深層拷貝),并且dest和 src元素都包括相同名稱的對(duì)象屬性,則對(duì)該對(duì)象屬性的方法和屬性再進(jìn)行一次復(fù)制。

* 最后我們來通過分析源代碼,來加深對(duì)該繼承機(jī)制的理解:

jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

// Handle a deep copy situation
if ( target.constructor == Boolean ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}

// Handle case when target is a string or something (possible in deep copy)

if ( typeof target != "object" && typeof target != "function" )
target = {};

// extend jQuery itself if only one argument is passed
if ( length == i ) {
target = this;
--i;
}

for ( ; i < length; i++ )
// Only deal with non-null/undefined values當(dāng)參數(shù)都為非空時(shí),
if ( (options = arguments[ i ]) != null )
// Extend the base object
for ( var name in options ) {
var src = target[ name ], copy = options[ name ];

// Prevent never-ending loop
if ( target === copy )
continue;

// Recurse if we're merging object values
if ( deep && copy && typeof copy == "object" && !copy.nodeType )
target[ name ] = jQuery.extend( deep,
// Never move original objects, clone them
src || ( copy.length != null ? [ ] : { } )
, copy );

// Don't bring in undefined values
else if ( copy !== undefined )
target[ name ] = copy;

}

// Return the modified object
return target;
};

* 注意:

在這里還有一個(gè)特殊的地方,就是在函數(shù)開頭的地方有jQuery.extend = jQuery.fn.extend,而在程序的前面已經(jīng)將jQuery.prototype賦值給jQuery.fn了,所以在后面的調(diào)用中會(huì)出現(xiàn) jQuery.extend()和jQuery.fn.extend()的不同調(diào)用,這兩個(gè)方法調(diào)用產(chǎn)生的結(jié)果也不一樣,jQuery.extend() 的調(diào)用并不會(huì)把方法擴(kuò)展到對(duì)象的實(shí)例上,引用它的方法也需要通過jQuery類來實(shí)現(xiàn),如jQuery.init(),而 jQuery.fn.extend()的調(diào)用把方法擴(kuò)展到了對(duì)象的prototype上,所以實(shí)例化一個(gè)jQuery對(duì)象的時(shí)候,它就具有了這些方法,這是很重要的,在jQuery.js中到處體現(xiàn)這一點(diǎn)