$.extend()和(function($){….})(jQuery)
1.??? JS中substring與substr的區(qū)別
之前在項(xiàng)目中用到substring方法,因?yàn)镃#中也有字符串的截取方法Substring方法,當(dāng)時(shí)也沒(méi)有多想就誤以為這兩種方法的使用時(shí)一樣的。這樣就直接按照在C#中使用Substring的方式,直接在js中用了substring,在實(shí)際的項(xiàng)目中,有時(shí)候能得到正確的結(jié)果,但是有時(shí)候得到的結(jié)果卻讓人匪夷所思,后來(lái)仔細(xì)的調(diào)試跟蹤之后才發(fā)現(xiàn),原來(lái)是Js中substring的方法跟C#中的Substring方法不一樣。關(guān)于C# 中的字符串截取方法已經(jīng)很簡(jiǎn)單了,這里就不再敘述了。主要講一個(gè)js中的substring方法,順便再講一下substr方法。
Substring:
該方法可以有一個(gè)參數(shù)也可以有兩個(gè)參數(shù)。
l? 一個(gè)參數(shù):
示例: var str=“Olive”;
?????????? ????str.substring(3);
??????? 結(jié)果:“ve”
??????? 說(shuō)明:當(dāng)substring只有一個(gè)參數(shù)時(shí),參數(shù)表示從字符串的第幾位開(kāi)始截取,
直截取到字符串結(jié)尾。
l? 兩個(gè)參數(shù):
??????? 示例:var str=“Olive”;
1)?????? Str.substring(3,4);
2)?????? Str.substring(3,2);
?????????? 結(jié)果:1) “v”? 2) 0
?????????? 說(shuō)明:當(dāng)substring有兩個(gè)參數(shù)時(shí),第一個(gè)參數(shù)表示從字符串的第幾位開(kāi)始截取,第二個(gè)參數(shù)表示截取到字符串的第幾位。這點(diǎn)是個(gè)C#中字符截取不同的一點(diǎn),所以才會(huì)導(dǎo)致不同的結(jié)果。
Substr:
該方法也可以有一個(gè)或兩個(gè)參數(shù)。
l? 一個(gè)參數(shù):
??? 說(shuō)明:substr一個(gè)參數(shù)時(shí),作用跟substring方法一個(gè)參數(shù)時(shí)一樣。
l? 兩個(gè)參數(shù):
??? 示例:var str=“Olive”;
1)?????? Str.substr(3,2);
2)?????? Str.substr(3,4);
??????? 結(jié)果:1) “ve” 2) “ve”
??????? 說(shuō)明:substr有兩個(gè)參數(shù)時(shí),第一個(gè)參數(shù)表示從字符串的第幾位開(kāi)始截取,第二個(gè)參數(shù)表示截取多少位字符串。這點(diǎn)跟C#中字符截取相同的,所以在以后的使用中,如果想要避免出現(xiàn)截取的問(wèn)題最好還是使用substr。
2 $.extend()
因?yàn)轫?xiàng)目中有些地方看到有用到這個(gè)方法,當(dāng)時(shí)也不知道是什么意思,見(jiàn)的多了就想了
解一下。原來(lái)這個(gè)方法還是挺有用的,多用在編寫(xiě)插件,當(dāng)然,它本身也有一些重載原型。
2.1 extend(result,item1,item2…..)
這里這個(gè)方法主要用來(lái)合并,將所有的參數(shù)項(xiàng)都合并result中,并返回result,但是這
樣就會(huì)破壞result的結(jié)構(gòu)。
2.2 extend({},item1,item2,……)
用這個(gè)方法,可以將所得的結(jié)果全部合并在{}中,并返回,而且還不會(huì)破壞原有的項(xiàng)的結(jié)構(gòu)。
示例:
Var item={name:”olive”,age:23};
Var item1={name:”Momo”,sex:”gril”};
Var result=$.extend({},item,item1);
結(jié)果:
Result={name:”Momo”,age:23,sex:”gril”};
說(shuō)明:
以上的結(jié)果表明extend方法將所有的項(xiàng)都合并到了{(lán)}中,但是,細(xì)心一點(diǎn)就會(huì)發(fā)現(xiàn),其中item1中的name:“Momo” 將item中的name:“olive”給覆蓋了,這是怎么回事?請(qǐng)接著往下看。
2.3 extend(bool,{},item1,item2….)
Extend方法還有帶bool型參數(shù)的重載。
bool型參數(shù)為true表示深拷貝,為false時(shí)表示淺拷貝。具體可以通過(guò)一下示例來(lái)說(shuō)明:
示例:
var item={name:“olive”,age:23,address{provice:”河南”,city:”鄭州”}};
var item1={sex:”girl”,address{city:”北京”}};
var result=$.extend(true,item,item1);
var result1=$.extend(false,item,item1);
結(jié)果:
Result={name:“olive”,age:23,sex:”gril”,address:{provice:”河南”,city:”北京”}};
Result1={name:“olive”,age:23,sex:”gril”,address:{ city:”北京”}};
說(shuō)明:
以上結(jié)果說(shuō)明,當(dāng)參數(shù)為ture時(shí),即為深拷貝,當(dāng)子項(xiàng)item1中的子項(xiàng)有與item中的子項(xiàng)相同屬性的值不一樣時(shí),item1中子項(xiàng)的值會(huì)將item子項(xiàng)中的值給覆蓋,當(dāng)子項(xiàng)item1的屬性跟item中的屬性不同時(shí),會(huì)與item進(jìn)行合并。
當(dāng)參數(shù)為false時(shí),子項(xiàng)item1中的子項(xiàng)中與item中的子項(xiàng)屬性相同時(shí),item1中子項(xiàng)的屬性值會(huì)將item中的值給完全覆蓋。
2.4 $.extend(item)
該方法是將item合并到Jquery的全局對(duì)象中去,相當(dāng)于為Jquery全局對(duì)象添加了一個(gè)
靜態(tài)方法(對(duì)應(yīng)這里的靜態(tài)方法,當(dāng)然還有實(shí)例方法,在后邊有介紹)。
???? 示例:
?????????? $.extend({SayHello:function(value){alert(“hello “+value);}});
?????????? 這樣寫(xiě)過(guò)之后,就可以直接調(diào)用SayHello方法:
?????????? $.SayHello(“Olive”);
???? 說(shuō)明:該方法相當(dāng)于為Jquery類添加了新的方法。
2.5 $.fn.extend(item)
上邊提到的$.extend(item)說(shuō)是為Jquery類添加了靜態(tài)方法,那么這里的$.fn.extend(item
)就是為每一個(gè)實(shí)例添加一個(gè)實(shí)例方法了。
???? 示例:
? ???????$.fn.extend({hello:function(value){alert(“hello “+value);}});
???????? 這樣寫(xiě)過(guò)之后,在獲取每一個(gè)示例之后,都可以調(diào)用該方法:
???????? $(“#id”).hello(“Olive”);
?
3.(function($){….})(jQuery)
初次看到這種寫(xiě)法時(shí),一頭霧水,不知所云。在網(wǎng)上查找了一些資料之后才有點(diǎn)明白。
我們先看第一個(gè)括號(hào)里邊的內(nèi)容:function($){….},這不就是一個(gè)匿名的函數(shù)嗎?但是它的形參比較奇怪,是$,這里主要是為了不與其它的庫(kù)沖突。
這樣我們就比較容易理解第一個(gè)括號(hào)內(nèi)的內(nèi)容就是定義了一個(gè)匿名函數(shù),我們?cè)谡{(diào)用函數(shù)的時(shí)候,都是函數(shù)名后邊加上括號(hào)以及實(shí)參,但是由于操作符的優(yōu)先級(jí)我們定義的匿名函數(shù)也需要用()括起來(lái)。
現(xiàn)在我想大家已經(jīng)很清楚這句話是什么意思了吧。第一個(gè)括號(hào)表示定義了一個(gè)匿名函數(shù),然后第二個(gè)函數(shù)表示為該函數(shù)傳遞的參數(shù),整個(gè)結(jié)合起來(lái)意思就是,定義了一個(gè)匿名函數(shù),然后又調(diào)用該函數(shù),該函數(shù)的實(shí)參為jQuery。
相當(dāng)于:function fun($){…};fun(jQuery);
這種方法多用于存放開(kāi)發(fā)的插件,執(zhí)行其中的代碼時(shí),Dom對(duì)象并不一定加載完畢。于此相反的是$(function(){}),這種方法在使用時(shí)頁(yè)面的Dom對(duì)象已經(jīng)加載完畢了。事實(shí)上該方法的全寫(xiě)是:$(document).ready(function(){});
?
好了,今天就總結(jié)到這里了,主要都是一些跟寫(xiě)插件相關(guān)的常用的方法,希望能給大家一些幫助。
總結(jié)
以上是生活随笔為你收集整理的$.extend()和(function($){….})(jQuery)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【学术相关】博士毕业也会看第一学历吗?
- 下一篇: 【Python】Python 远程连接服