JavaScript對象基礎(chǔ)

  • 對象是一個包含相關(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返回字符串的字符長度
參考資料


for in

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容