函數(shù):
? ? 因?yàn)楹瘮?shù)屬于引用類型道盏,有屬性和方法。而且函數(shù)屬于一種特殊的對(duì)象繼承自obj,函數(shù)名其實(shí)就是一個(gè)指向函數(shù)對(duì)象的指針翘骂。
?所以當(dāng)重復(fù)定義了兩次函數(shù)之后,第二次定義的函數(shù)會(huì)將函數(shù)指針指向第二個(gè)被實(shí)例化的函數(shù)對(duì)象
? ? 理解一下重載:
? ? ? ? ? ? ? ? ? ? 重載就是給函數(shù)設(shè)置不同的參數(shù)個(gè)數(shù)和類型帚豪,通過(guò)控制傳參來(lái)調(diào)用不同的方法碳竟。
? ??? ? ?但是js有形參和實(shí)參的機(jī)制,所以重載是不存在的狸臣,但是可以通過(guò)使用函數(shù)內(nèi)部屬性(arguments)來(lái)控制
?arguments代表的是實(shí)參合并成數(shù)組的形式? ? arguments[0]//表示傳遞的第一個(gè)元素? ? arguments[1]//表示傳遞的第二個(gè)元素
所以可以通過(guò)判斷arguments的長(zhǎng)度來(lái)控制函數(shù)內(nèi)部執(zhí)行不同的方法達(dá)到變相的重載效果莹桅。
arguments這個(gè)對(duì)象還有一個(gè)屬性:callee,該屬性是一個(gè)指針烛亦,指向擁有arguments對(duì)象的函數(shù)诈泼。不太理解這個(gè)。煤禽。下次看到補(bǔ)上
對(duì)象:
? ? 關(guān)于對(duì)象內(nèi)屬性調(diào)用铐达,可以打點(diǎn)調(diào)用obj.name;也可以用括號(hào),用括號(hào)可以寫(xiě)變量obj[name]
js 的每一個(gè)實(shí)例都具有以下屬性和方法:
constructor
保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)檬果,對(duì)于前面的例子瓮孙,構(gòu)造函數(shù)就是object()
hasOwnProperty(propertyName)
檢查當(dāng)前屬性在當(dāng)前對(duì)象實(shí)例中唐断,而不是在原型中是否存在。參數(shù)以字符串的形式杭抠。就是檢查當(dāng)前屬性是否是對(duì)象專屬的脸甘,而不是通過(guò)原型繼承過(guò)來(lái)的.
isPrototypeOf(object)
檢查傳入對(duì)象是否是傳入對(duì)象的原型
propertyIsEnumerable(propertyName)
用來(lái)檢查給定的屬性是否是枚舉類型。能被for...in遍歷出來(lái)的屬性祈争;未經(jīng)由Object.defineProperty定義為不可列舉斤程。但是可以通過(guò)Object.defineProperty(obj, 'toString', {value: ..., enumerable: false})去設(shè)置某屬性為不可枚舉的
toLocaleString()
返回對(duì)象的字符串表示
person.toString()
返回對(duì)象的字符串表示
valueOf()返回對(duì)象的字符串表示
Object.create()創(chuàng)建
該方法有兩個(gè)參數(shù),我就只解釋下第一參數(shù)菩混,第二個(gè)參數(shù)不常用(對(duì)對(duì)象的屬性進(jìn)行進(jìn)一步描述)
第一個(gè)參數(shù):傳入要繼承的原型(prototype)對(duì)象
怎樣理解這句話呢忿墅?
var obj1 = Object.create({
??name:?"ys",
??age: 12
});
console.log(obj1);?//{}
console.log(obj1.age);?//12
所以創(chuàng)建一個(gè)空對(duì)象:
varobj3 = Object.create(Object.prototype);
console.log(obj3);?//{},(空對(duì)象沮峡,與前兩個(gè)方法 {}疚脐,new Object 相同)
console.log(obj3.__proto__);?//如下圖 ,只包含了基本對(duì)象的方法
如果是一個(gè)對(duì)象需要至空邢疙,那就直接obj=null棍弄;