**構造函數** 是一個普通函數,約定首字母大寫,配合 `new` 操作符調用,用於**初始化新創建的對象實例**。
// 1. 定義構造函數
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHi = function() { console.log(this.name); };
}
// 2. 實例化
var p1 = new Person('Alice', 20);
var p2 = new Person('Bob', 25);
p1.sayHi(); // "Alice"
console.log(p1 instanceof Person); // true
console.log(p1.__proto__ === Person.prototype); // true
`Number`、`String`、`Array`、`Object`、`Date`、`RegExp`、`Function` 等均為構造函數:
var arr = new Array(1,2,3); // 等同 [1,2,3]
var num = new Number(123); // 包裝對象,非原始值
var obj = new Object(); // 等同 {}
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHi() { console.log(this.name); }
}
// 編譯後本質仍是構造函數 + prototype 掛載方法