JavaScript對象淺談

來源:互聯網
上載者:User

標籤:執行個體化   prototype   glob   自訂   this   方法   做了   區別   支援   

JavaScript對象對象

ECMA-262 把對象(object)定義為“屬性的無序集合,每個屬性存放一個原始值、對象或函數”。嚴格來說,這意味著對象是無特定順序的值的數組。

對象是屬性和方法的無序集合

對象就是無序屬性的集合

儘管 ECMAScript 如此定義對象,但它更通用的定義是基於代碼的名詞(人、地點或事物)的表示。

 

在JavaScript中,除了數字、字串、布爾值、null、undefined這五種原始類型,之外的都是對象,也就是印證了“萬物皆對象”的說法。

對象是一種複合值,它將很多值彙總在一起,(這些值可能是原始類型或者其他對象),可以通過屬性名稱訪問這些值,而屬性名稱是可以包含Null 字元串的任一字元串。

JavaScript對象也是一種資料結構,可以使用instanceof 運算子用來測試一個對象在其原型鏈中是否存在一個建構函式的 prototype 屬性。

對象的類型:在 ECMAScript 中,所有對象並非同等建立的。

一般來說,可以建立並使用的對象有三種:

1、  本機物件(native object)

ECMA-262 把本機物件(native object)定義為“獨立於宿主環境的 ECMAScript 實現提供的對象”。簡單來說,本機物件就是 ECMA-262 定義的類(參考型別)。

Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

 

 

2、 內建對象(built-in object)

ECMA-262 把內建對象(built-in object)定義為“由 ECMAScript 實現提供的、獨立於宿主環境的所有對象,在 ECMAScript 程式開始執行時出現”。這意味著開發人員不必明確執行個體化內建對象,它已被執行個體化了。ECMA-262 只定義了兩個內建對象,即 Global 和 Math (它們也是本機物件,根據定義,每個內建對象都是本機物件)。

3、 宿主對象(host object)

即JavaScript解譯器所嵌入的宿主環境(比如瀏覽器)定義的,例如HTMLElement等;

對象屬性:

1、 自有屬性own property:直接在對象中定義的屬性;

2、 繼承屬性(inherited property:在對象的原型對象中定義的屬性

物件導向語言的要求

一種物件導向語言需要向開發人員提供四種基本能力:

  1. 封裝 - 把相關的資訊(無論資料或方法)儲存在對象中的能力
  2. 聚集 - 把一個Object Storage Service在另一個對象內的能力
  3. 繼承 - 由另一個類(或多個類)得來類的屬性和方法的能力
  4. 多態 - 編寫能以多種方法啟動並執行函數或方法的能力

ECMAScript 支援這些要求,因此可被看做是物件導向的。

JavaScript還是一門基於對象的弱類型語言

基於對象:內建大量對象,只要少量代碼可以完成工作

弱類型:對類型要求不嚴格

對象的構成

在 ECMAScript 中,對象由特性(attribute)構成,特性可以是原始值,也可以是引用值。如果特性存放的是函數,它將被看作對象的方法(method),否則該特性被看作對象的屬性(property)。

對象的建立

1.對象直接量(字面量)

對象直接量由若干名/值對組成的映射表,名/值對中間用冒號分隔,名/值對之間用逗號分隔,整個映射表用花括弧括起來。屬性名稱可以是JavaScript標識符也可以是字串直接量,也就是說下面兩種建立對象obj的寫法是完全一樣的:

var obj = {x: 1, y: 2};var obj = {‘x‘: 1, ‘y‘:2};

 


2.通過new建立對象(建構函式方式)

new運算子後跟隨一個函數調用,即建構函式,建立並初始化一個新對象。

var computer=new Object();computer.size=15.6;computer.color=‘黑色‘;computer.price=‘6999¥‘;computer.brand=‘DELL‘;computer.open=function () {    console.log(‘砸碎‘);}computer.close=function () {    console.log(‘因為關機被砸壞,需要買新機‘);}

 


3.Object.create()

ECMAScript5定義了一個名為Object.create()的方法,它建立一個新對象,其中第一個參數是這個對象的原型對象

對象的建構函式

自訂建構函式

建構函式,本質上也是函數,要用function關鍵字聲明

命名:使用你所想描述的對象的名稱來命名,首字母大寫(約定俗成的規定)在建構函式中使用this代替對象

function student(number,age,gender,name,level) {    this.number=number;    this.age=age;    this.gender=gender;    this.name=name;    this.level=level;    this.doHomework=function () {        console.log(‘大家好,我是‘+this.level+‘的‘+this.name+‘,一個喜歡開車的‘+gender);    }    this.runOutClass=function () {        console.log(‘逃課是因為喜歡開車‘);    }}var stu1=new student(‘20‘,18,‘男人‘,‘k哥‘,‘三年級‘);stu1.doHomework();stu1.runOutClass();console.log(stu1);

 

this關鍵字

1、在建構函式內部: this是指代建構函式內部的當前對象

2、在普通函數內部:在函數調用的時候,this指向調用這個函數的對象,誰調用這個函數(方法),函數中的this就是誰

new 關鍵字

做了哪些事情:

1、建立了一個對象,並且把這個對象存在了this裡面

this = new Object();

2、執行建構函式裡的代碼,為建立的對象添加屬性和方法

3、把this返回給調用建構函式的地方

return this;

 

訪問對象的屬性

1、通過點的方式:對象.屬性

2、通過鍵的方式:對象[屬性對應的名稱字串]

使用for-in格式遍曆對象的屬性

格式:

for ( var 屬性名稱 in 要遍曆的對象 ) {

你希望要寫的代碼

}

基本類型和參考型別

基本類型:

數字、字串、布爾、undefined、null

參考型別:Object

基本和參考型別的區別

1、儲存的位置不一樣

基本類型是儲存在棧上的

參考型別是儲存在堆上的

2、發生傳參的時候

基本類型是複製一份進入函數參與運算的

參考型別,複製的是儲存在棧上的記憶體位址,這個記憶體位址是指向堆中的對象的。所以在函數執行的時候,實際上操縱的是同一個對象

基本類型傳參,不會改變實參的

參考型別傳參,會改變實參

 

JavaScript對象淺談

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.