String.slice(start, end)
end 均可選蒸痹,默認(rèn)為數(shù)組長(zhǎng)度
參數(shù)若為負(fù)數(shù)時(shí)观腊,則從后選取,沒(méi)有任何理由使用string.substring(start, end)
沒(méi)有任何理由去使用
與array.slice() 不同在于,數(shù)組的該方法第一個(gè)參數(shù)也非必須幔虏,默認(rèn)從第一位開(kāi)始記
對(duì)象
hasOwnProperty(),?檢查對(duì)象原有屬性,obj1.hasOwnProperty(‘name’) 返回布爾值贝椿,不會(huì)訪問(wèn)原型鏈
for… in,?枚舉想括,將會(huì)枚舉所有屬性包括函數(shù)和原型中的屬性,可以過(guò)濾烙博。 for (name in obj) { if (type of obj[name !==?“function” && obj.hasOwnProperty(‘name’) {// }瑟蜈,通過(guò)for in 循環(huán)獲得的順序是不確定的,更好的做法是數(shù)組列舉出想要的屬性名渣窜,通過(guò)for遍歷數(shù)組铺根。
.delete,?刪除對(duì)象屬性,從而暴露原型對(duì)象屬性乔宿, delete obj.name
減少全局變量污染位迂,為你的應(yīng)用只創(chuàng)建一個(gè)唯一的全局對(duì)象。var MYAPP = {}; MYAPP.stooge = {};
四種調(diào)用模式
調(diào)用一個(gè)函數(shù)會(huì)暫停當(dāng)前函數(shù)的執(zhí)行,傳遞控制權(quán)和參數(shù)給新的函數(shù)掂林。除了聲明時(shí)定義的形式參數(shù)臣缀,每個(gè)函數(shù)還接收兩個(gè)附加參數(shù):this 和argument。this的值取決于調(diào)用模式泻帮。
方法調(diào)用模式精置。調(diào)用表達(dá)式包含一個(gè)提取屬性的動(dòng)作“.”或“[]”。方法可以使用this訪問(wèn)自己所屬的對(duì)象锣杂,this對(duì)對(duì)象的綁定發(fā)生在調(diào)用的時(shí)候脂倦,通過(guò)this可取得所屬對(duì)象的方法稱(chēng)為公共方法。
函數(shù)調(diào)用模式蹲堂。當(dāng)一個(gè)函數(shù)并非當(dāng)作屬性時(shí)狼讨,就被當(dāng)做函數(shù)來(lái)調(diào)用,this被綁定到全局對(duì)象柒竞。外部函數(shù)可以通過(guò)將上下文通過(guò)變量賦值政供,供內(nèi)部函數(shù)訪問(wèn),內(nèi)部函數(shù)直接訪問(wèn)的this將是全局對(duì)象朽基。
構(gòu)造器調(diào)用模式布隔。new 構(gòu)造函數(shù),this綁定到通過(guò)new創(chuàng)建的新對(duì)象上稼虎。一個(gè)函數(shù)創(chuàng)建的目的就是希望通過(guò)new前綴愛(ài)調(diào)用衅檀,那它就被稱(chēng)為構(gòu)造器函數(shù)。
apply調(diào)用模式霎俩。接收兩個(gè)參數(shù)哀军,第一個(gè)是要綁定給this的值,第二個(gè)是參數(shù)數(shù)組打却。
返回
如果函數(shù)調(diào)用時(shí)在前面加上了new前綴杉适,且返回值不是一個(gè)對(duì)象,則返回this該新對(duì)象柳击。
擴(kuò)充類(lèi)型的功能
通過(guò)對(duì)Object.prototype添加方法使得該方法對(duì)所有函數(shù)可用猿推。
Function.prototype.method = function(name, func) {
this.prototype[name] = func;
return this;
}
下次給函數(shù)添加方法時(shí)就可以省略prototype幾個(gè)字,如Number.method(‘integer’, function(){})
通過(guò)給基本類(lèi)型增加方法捌肴,可以極大的提高語(yǔ)言的表現(xiàn)力蹬叭,原型繼承的動(dòng)態(tài)本質(zhì),新的方法立刻被賦予到所有對(duì)象實(shí)例上状知,即便方法實(shí)例在添加之前已經(jīng)創(chuàng)建好了秽五。
基本類(lèi)型是公用的結(jié)構(gòu),更好的做法是在沒(méi)有該方法名時(shí)才去創(chuàng)建
Function.prototype.method = function(name, func) {
if(!this.prototype[method]) {//不存在方法時(shí)再創(chuàng)建
this.prototype[name] = func;
return this;
}
}
作用域
在函數(shù)中的參數(shù)和變量试幽,在函數(shù)外部是不可見(jiàn)的筝蚕,而在函數(shù)內(nèi)部任何位置定義的變量卦碾,在該函數(shù)內(nèi)部任何地方都可見(jiàn)。
閉包
函數(shù)可以訪問(wèn)它被創(chuàng)建時(shí)的上下文環(huán)境起宽。內(nèi)部函數(shù)擁有比它的外部函數(shù)更長(zhǎng)的生命周期洲胖?
for(i=0; i
nodes[i].onclick = function(e) {
alert(i)//事件處理器綁定了變量i自身,而不是函數(shù)在構(gòu)造時(shí)的變量i
}
}
改造后:
var helper = function(i) {
return function(e) {
alert(i)
}
}
var i;
for (i = 0; i < nodes.length; i++) {
nodes[i].onclick = helper(i)//輔助函數(shù)保留了當(dāng)前的i坯沪;
}
模塊模式
模塊模式的一般形式绿映,一個(gè)定義了私有變量和函數(shù)的函數(shù),利用閉包創(chuàng)建可以訪問(wèn)私有變量和函數(shù)的特權(quán)函數(shù)腐晾,最后返回特權(quán)函數(shù)叉弦,或保存到可以訪問(wèn)的地方。