1. 程式人生 > 程式設計 >JavaScript物件字面量和建構函式原理與用法詳解

JavaScript物件字面量和建構函式原理與用法詳解

本文例項講述了JavaScript物件字面量和建構函式。分享給大家供大家參考,具體如下:

物件中只有兩種屬性:(一種比較細的分法)

屬性(資料屬性)比如:名字,年齡,性別,出版社,地址等資訊;
方法(封裝程式碼的屬性:函式 ,在這也是一種屬性)。

在JS中物件的字面量和建構函式是非常的重點,其實在其他的語言中,是沒有物件字面量的。

一.物件的字面量的語法:

{
屬性名: 屬性值,
屬性名: 屬性值,
方法名: 你們函式
}

這個大括號括起來的整個程式碼塊就是叫做物件。

var p1 = { }

①訪問物件的屬性:

1. . 語法

物件.屬性

2. [ ] 語法

物件["屬性名"]

物件[變數] 通過外面var一個變數,這個變數型別是字串,然後在[]中直接使用變數名。

②修改屬性的值:(當這個屬性名在物件字面量中是存在的,那就是修改其值)
②修改屬性的值:(當這個屬性名在物件字面量中是存在的,那就是修改其值)
③新增屬性的值:(當這個屬性名在物件字面量中是沒有的,那就是新增其屬性名和屬性值)

修改和新增都是一下語法:

物件.屬性名 = 值

④刪除物件的屬性:

delete 物件.屬性

二.使用建構函式來建立物件:

  function Person(name,sex){
    var a = 10;
    this.name = name;
    this.sex = sex;
    this.speak = function(){

          }
    }

現在我們new一下:

var p1 = new Person ;

那麼我們就叫p1是一個物件,一new出來就會在堆記憶體中分配一塊記憶體空間。

那麼p1的型別就是Person.

那麼如果我們用 p1 instanceof Person 檢測會返回true,那麼 instanceof 就是測試物件型別。

在程式碼塊中,var a = 10 ; 這個語句是一個變數,變數是放在 棧記憶體 ,但當他執行完一遍這個建構函式時,這個a就消失了,也就是說這個區域性變數的生命週期是new出來到執行完建構函式最後一句的就消失了。

但是 裡面的屬性,name sex speak 這些屬性上只要p1在他們就在。

那麼現在我們再次體會一下區域性變數a的生命週期和記憶體模型中的理解:

<script>
  function Person(name,sex) {
    var a = 10;
    this.name = name;
    this.sex = sex;
    this.outputa = function () {
      console.log(a);
    }
    this.speak = function () {

    }
  }

  var p1 = new Person();
  console.log(p1.a);
  p1.outputa();
</script>

結果是:

JavaScript物件字面量和建構函式原理與用法詳解

首先,var p1 = new Person();,new一下出來一個p1物件,計算機就會在堆記憶體(heap memory)中為P1選中一塊記憶體。

然後,console.log(p1.a);,這句語句執行,這句可以這麼理解①:你a在全域性變數中並沒有,只在建構函式中的區域性變數中才有,在建構函式中的區域性變數var a = 10;他會宣告提前,但是他只是提前到函式的第一行執行。這也就可以說明區域性變數,我們不能在外部使用。理解②就是函式作用域中的變數他是區域性變數,在棧記憶體分配記憶體後,當函式執行到最後一行時,他就結束生命週期。

這個undefined是JS的一種安全機制,如果物件點一個沒有生命的變數,那麼就會預設成undefined,但如果是普通的變數,就會報錯。報錯資訊是這個變數未被定義。

詳見:JavaScript記憶體模型詳解。

*注意:物件字面量的用法用

​ 建構函式的用法用 =

那麼型別和物件之間的關係是什麼呢?

也就是比如p1和Person的關係是什麼呢?見下表:

型別 物件
抽象 具體
其他語言中類的作用
在JS中是建構函式的形式(建構函式=類)
命名用大坨法(首字母大寫)

感興趣的朋友可以使用線上HTML/CSS/JavaScript程式碼執行工具:http://tools.jb51.net/code/HtmlJsRun測試上述程式碼執行效果。

更多關於JavaScript相關內容感興趣的讀者可檢視本站專題:《javascript面向物件入門教程》、《JavaScript錯誤與除錯技巧總結》、《JavaScript資料結構與演算法技巧總結》、《JavaScript遍歷演算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程式設計有所幫助。