iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Modern Web

JavaScript學習筆記系列 第 21

[Day 21] 建構函式 constructor function

  • 分享至 

  • xImage
  •  

在JavaScript中,建構函式(Constructor Function)是用來建立物件的特殊函式。

  • 命名習慣首字母大寫
  • 需透過new關鍵字來建立物件

看看new是什麼~

new關鍵字

When a function is called with the new keyword, the function will be used as a constructor.

使用new關鍵字呼叫函式時,該函式被當作建構函式。

語法

new constructor(arg1, arg2,...,argN)

new背後執行的步驟:

  1. 建立一個新的空物件。此空物件的[[Prototype]]屬性會被設定為建構函式的prototype
  2. 建構函式內的this會指向到新物件。
  3. 建構函式的內容,會成為新物件的屬性和方法。
  4. 回傳新物件。

範例:

function Book(title, author, page) {
  this.title = title;
  this.author = author;
  this.page = page;
  this.getSummary = function () {
    return `這本書叫${this.title},是由${this.author}作者撰寫, 總共頁數${this.page}。`;
  };
}

const book1 = new Book("JavaScript全攻略", "Peter", 315);

const book2 = new Book("前端初學者必讀", "小白", 250);

執行結果:

book1.getSummary(); //'這本書叫JavaScript全攻略,是由Peter作者撰寫, 總共頁數315。'
book2.getSummary(); //'這本書叫前端初學者必讀,是由小白作者撰寫, 總共頁數250。'
  • 使用new關鍵字呼叫Book建構函式時,會生成一個新的物件,並將this指向該物件。
  • 如果沒有加new關鍵字的話,會被當作一般函式執行。因為Book建構函式沒有回傳,所以印出為undefined
//沒有加上new
const book3 = Book("book3","John",205);
console.log(book3); //undefined
  • 用Book建構函式生成的物件book1book2,兩者並沒有任何關係。
console.log(book1 === book2); //false
  • 物件book1和book2的__proto__,會自動指向建構函式的prototype屬性。
console.log(book1.__proto__ === Book.prototype); //true
console.log(book2.__proto__ === Book.prototype); //true

在這個範例中,Book建構函式建立了兩個物件book1和book2,而每個物件都有title、author、page屬性和getSummary方法。
透過這樣的方式,可以更容易建立多個物件。

以上分享~謝謝!

參考資料

MDN - constructor
MDN - new


上一篇
[Day 20] Prototype 原型
下一篇
[Day 22] Class語法糖
系列文
JavaScript學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言