- 對象是一個包含相關(guān)數(shù)據(jù)和方法的集合(通常由一些變量和函數(shù)組成,我們稱之為對象里面的屬性和方法)
- 創(chuàng)建一個對象通常先定義初始化變量
var person = {};
- 一個對象由許多的成員組成,每一個成員都擁有一個名字。每一個名字/值(name/value)對被逗號分隔開,并且名字和值之間由冒號(:)分隔,語法規(guī)則如下所示:
var objectName = {
member1Name : member1Value,
member2Name : member2Value,
member3Name : member3Value
}
- 對象里有字符串(string),數(shù)字(number),兩個數(shù)組(array),兩個函數(shù)(function)。
- 屬性和方法既可以用點表示法也可以用方括號法來表示,后者較前者更多地用于變量的使用
- 這是一個對象
name : {
first : 'Bob',
last : 'Smith'
},
鏈式的再使用一次點表示法,像這樣:
person.name.first
person.name.last12
- 兩種方法都可以用來修改、新增、刪除對象屬性或方法
- 對象+this 可以限定this的作用域
原型對象概念
無論什么時候,只要創(chuàng)建一個新函數(shù),就會根據(jù)一組特定的規(guī)則為該函數(shù)創(chuàng)建一個prototype屬性,這個屬性指向函數(shù)的原型對象。在默認情況下,所有原型對象都會自動獲得一個constructor(構(gòu)造函數(shù))屬性,這個屬性包含一個指向 prototype 屬性所在函數(shù)的指針。而通過這個構(gòu)造函數(shù),可以繼續(xù)為原型對象添加其他屬性和方法。創(chuàng)建了自定義的構(gòu)造函數(shù)后,其原型對象默認只會取得 constructor 屬性;至于其他方法,則都從 Object 繼承而來。當(dāng)調(diào)用構(gòu)造函數(shù)創(chuàng)建一個新實例后,該實例的內(nèi)部將包含一個指針(內(nèi)部屬性),指向構(gòu)造函數(shù)的原型對象。ECMA-262第5版管這個指針叫[[Prototype]] 。腳本中沒有標準的方式訪問[[Prototype]],但Firefox、Safari和Chrome在每個對象上都支持一個屬性proto;而在其他實現(xiàn)中,這個屬性對腳本是完全不可見的。不過,要明確的真正重要的一點就是,這個連接存在于示例和構(gòu)造函數(shù)的原型對象之間,而不是存在于實例和構(gòu)造函數(shù)之間。
這段話基本概述了構(gòu)造函數(shù)、原型、示例之間的關(guān)系,下圖表示更清晰
其實javascript的new關(guān)鍵字只不過做了五件事情。
1.創(chuàng)建Object
2.查找class的prototype上的所有方法、屬性,復(fù)制一份給創(chuàng)建的Object(注意,如果prototype上有屬性是function或者數(shù)組或者Object,那么只復(fù)制指針)
3.將構(gòu)造函數(shù)classA內(nèi)部的this指向創(chuàng)建的Object
4.創(chuàng)建的Object的proto指向class的prototype
5.執(zhí)行構(gòu)造函數(shù)class
Object對象屬性及方法(了解)
- constructor屬性
constructor屬性是保存當(dāng)前對象的構(gòu)造函數(shù),前面的例子中,constructor保存的就是Object方法。
var obj1 = new Object();
obj1.id = "obj1";
varobj2 = {
"id": "obj2"
};
console.log(obj1.constructor);//functionObject(){}
console.log(obj2.constructor);//functionObject(){}
**hasOwnProperty(propertyName)hasOwnProperty方法接收一個字符串參數(shù),該參數(shù)表示屬性名稱,用來判斷該屬性是否在當(dāng)前對象實例中,而不是在對象的原型鏈中。我們來看看下面這個例子:
isPrototypeOf(Object)isPrototype方法接收一個對象,用來判斷當(dāng)前對象是否在傳入的參數(shù)對象的原型鏈上
propertyIsEnumerable(prototypeName)prototypeIsEnumerable用來判斷給定的屬性是否可以被for..in語句給枚舉出來。
toLocaleString()toLocalString方法返回對象的字符串表示,和代碼的執(zhí)行環(huán)境有關(guān)。
toString()toString用來返回對象的字符串表示。
valueOf()valueOf方法返回對象的原始值,可能是字符串、數(shù)值或bool值等,看具體的對象。
JS對象
String對象
屬性:
constructor所建立對象的函數(shù)參考
prototype能夠為對象加入的屬性和方法
length返回字符串的字符長度
參考資料
