Javascript中的extend用法

1.??? JS中substring與substr的區(qū)別

之前在項目中用到substring方法廊镜,因為C#中也有字符串的截取方法Substring方法隙券,當(dāng)時也沒有多想就誤以為這兩種方法的使用時一樣的男应。這樣就直接按照在C#中使用Substring的方式,直接在js中用了substring娱仔,在實際的項目中沐飘,有時候能得到正確的結(jié)果,但是有時候得到的結(jié)果卻讓人匪夷所思牲迫,后來仔細(xì)的調(diào)試跟蹤之后才發(fā)現(xiàn)耐朴,原來是Js中substring的方法跟C#中的Substring方法不一樣。關(guān)于C# 中的字符串截取方法已經(jīng)很簡單了盹憎,這里就不再敘述了筛峭。主要講一個js中的substring方法,順便再講一下substr方法陪每。

Substring:

該方法可以有一個參數(shù)也可以有兩個參數(shù)影晓。

l? 一個參數(shù):

示例: var str=“Olive”;

?????????? ????str.substring(3);

??????? 結(jié)果:“ve”

??????? 說明:當(dāng)substring只有一個參數(shù)時檩禾,參數(shù)表示從字符串的第幾位開始截取挂签,

直截取到字符串結(jié)尾。

l? 兩個參數(shù):

??????? 示例:var str=“Olive”锌订;

1)?????? Str.substring(3,4);

2)?????? Str.substring(3,2);

?????????? 結(jié)果:1) “v”? 2) 0

?????????? 說明:當(dāng)substring有兩個參數(shù)時竹握,第一個參數(shù)表示從字符串的第幾位開始截取画株,第二個參數(shù)表示截取到字符串的第幾位辆飘。這點(diǎn)是個C#中字符截取不同的一點(diǎn),所以才會導(dǎo)致不同的結(jié)果谓传。

Substr:

該方法也可以有一個或兩個參數(shù)蜈项。

l? 一個參數(shù):

??? 說明:substr一個參數(shù)時,作用跟substring方法一個參數(shù)時一樣续挟。

l? 兩個參數(shù):

??? 示例:var str=“Olive”紧卒;

1)?????? Str.substr(3,2);

2)?????? Str.substr(3,4);

??????? 結(jié)果:1) “ve” 2) “ve”

??????? 說明:substr有兩個參數(shù)時,第一個參數(shù)表示從字符串的第幾位開始截取诗祸,第二個參數(shù)表示截取多少位字符串跑芳。這點(diǎn)跟C#中字符截取相同的轴总,所以在以后的使用中,如果想要避免出現(xiàn)截取的問題最好還是使用substr博个。

2 $.extend()

因為項目中有些地方看到有用到這個方法怀樟,當(dāng)時也不知道是什么意思,見的多了就想了

解一下盆佣。原來這個方法還是挺有用的往堡,多用在編寫插件,當(dāng)然共耍,它本身也有一些重載原型虑灰。也可是實現(xiàn)靜態(tài)方法:

$.extend({

sayHello: function (name) {

console.log('Hello,' + (name ? name : 'Dude') + '!');

}

})

$.sayHello(); //調(diào)用

$.sayHello('Wayou'); //帶參調(diào)用

2.1 extend(result,item1,item2…..)

這里這個方法主要用來合并穆咐,將所有的參數(shù)項都合并result中庸娱,并返回result谐算,但是這

樣就會破壞result的結(jié)構(gòu)。

2.2 extend({},item1,item2,……)

用這個方法斤儿,可以將所得的結(jié)果全部合并在{}中恐锦,并返回一铅,而且還不會破壞原有的項的結(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”};

說明:

以上的結(jié)果表明extend方法將所有的項都合并到了{(lán)}中肮之,但是戈擒,細(xì)心一點(diǎn)就會發(fā)現(xiàn)艰毒,其中item1中的name:“Momo” 將item中的name:“olive”給覆蓋了,這是怎么回事柑土?請接著往下看。

2.3 extend(bool,{},item1,item2….)

Extend方法還有帶bool型參數(shù)的重載幌缝。

bool型參數(shù)為true表示深拷貝涵卵,為false時表示淺拷貝荒叼。具體可以通過一下示例來說明:

示例:

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:”北京”}};

說明:

以上結(jié)果說明被廓,當(dāng)參數(shù)為ture時,即為深拷貝昆婿,當(dāng)子項item1中的子項有與item中的子項相同屬性的值不一樣時仓蛆,item1中子項的值會將item子項中的值給覆蓋挎春,當(dāng)子項item1的屬性跟item中的屬性不同時,會與item進(jìn)行合并能庆。

當(dāng)參數(shù)為false時脚线,子項item1中的子項中與item中的子項屬性相同時邮绿,item1中子項的屬性值會將item中的值給完全覆蓋。

2.4 $.extend(item)

該方法是將item合并到Jquery的全局對象中去一死,相當(dāng)于為Jquery全局對象添加了一個

靜態(tài)方法(對應(yīng)這里的靜態(tài)方法傻唾,當(dāng)然還有實例方法冠骄,在后邊有介紹)凛辣。

???? 示例:

?????????? $.extend({SayHello:function(value){alert(“hello “+value);}});

?????????? 這樣寫過之后,就可以直接調(diào)用SayHello方法:

?????????? $.SayHello(“Olive”);

???? 說明:該方法相當(dāng)于為Jquery類添加了新的方法防泵。

2.5 $.fn.extend(item)

上邊提到的$.extend(item)說是為Jquery類添加了靜態(tài)方法捷泞,那么這里的$.fn.extend(item

)就是為每一個實例添加一個實例方法了寿谴。

???? 示例:

? ???????$.fn.extend({hello:function(value){alert(“hello “+value);}});

???????? 這樣寫過之后,在獲取每一個示例之后咏瑟,都可以調(diào)用該方法:

???????? $(“#id”).hello(“Olive”);


3.(function($){….})(jQuery)

初次看到這種寫法時码泞,一頭霧水狼犯,不知所云。在網(wǎng)上查找了一些資料之后才有點(diǎn)明白劈狐。

我們先看第一個括號里邊的內(nèi)容:function($){….}呐馆,這不就是一個匿名的函數(shù)嗎汹来?但是它的形參比較奇怪,是$,這里主要是為了不與其它的庫沖突坟岔。

這樣我們就比較容易理解第一個括號內(nèi)的內(nèi)容就是定義了一個匿名函數(shù)摔桦,我們在調(diào)用函數(shù)的時候承疲,都是函數(shù)名后邊加上括號以及實參燕鸽,但是由于操作符的優(yōu)先級我們定義的匿名函數(shù)也需要用()括起來啊研。

現(xiàn)在我想大家已經(jīng)很清楚這句話是什么意思了吧鸥拧。第一個括號表示定義了一個匿名函數(shù),然后第二個函數(shù)表示為該函數(shù)傳遞的參數(shù)沟娱,整個結(jié)合起來意思就是舆声,定義了一個匿名函數(shù),然后又調(diào)用該函數(shù)碱屁,該函數(shù)的實參為jQuery蛾找。

相當(dāng)于:function fun($){…};fun(jQuery);

這種方法多用于存放開發(fā)的插件,執(zhí)行其中的代碼時柿赊,Dom對象并不一定加載完畢幻枉。于此相反的是$(function(){}),這種方法在使用時頁面的Dom對象已經(jīng)加載完畢了胰挑。事實上該方法的全寫是:$(document).ready(function(){});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞻颂,一起剝皮案震驚了整個濱河市郑象,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盖矫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吐根,死亡現(xiàn)場離奇詭異辐马,居然都是意外死亡局义,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來另萤,“玉大人,你說我怎么就攤上這事四敞》尬#” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵缎玫,是天一觀的道長赃磨。 經(jīng)常有香客問我,道長邻辉,這世上最難降的妖魔是什么恩沛? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任雷客,我火速辦了婚禮,結(jié)果婚禮上搅裙,老公的妹妹穿的比我還像新娘。我一直安慰自己娜汁,他們只是感情好兄朋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布傅事。 她就那樣靜靜地躺著,像睡著了一般蹭越。 火紅的嫁衣襯著肌膚如雪教届。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天买置,我揣著相機(jī)與錄音堕义,去河邊找鬼脆栋。 笑死,一個胖子當(dāng)著我的面吹牛椿争,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褐捻,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼柠逞,長吁一口氣:“原來是場噩夢啊……” “哼景馁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绰精,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤笨使,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硫椰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涉馁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年爱致,在試婚紗的時候發(fā)現(xiàn)自己被綠了糠悯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片互艾。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纫普,死狀恐怖好渠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情假栓,我是刑警寧澤霍掺,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布杆烁,位于F島的核電站,受9級特大地震影響烤芦,放射性物質(zhì)發(fā)生泄漏入热。R本人自食惡果不足惜晓铆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一骄噪、第九天 我趴在偏房一處隱蔽的房頂上張望蠢箩。 院中可真熱鬧,春花似錦滔韵、人聲如沸掌实。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽症昏。三九已至父丰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攘烛,已是汗流浹背医寿。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工靖秩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竖瘾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棒呛。 傳聞我的和親對象是個殘疾皇子域携,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容