例項: 是由類或建構函式建立的具體物件,透過 new
關鍵字呼叫建構函式建立,或透過 class
關鍵字定義類並建立
類方法/靜態方法:它是定義在類或建構函式本身上的方法,透過類或建構函式呼叫,不能透過例項呼叫
1.透過構造器建立例項建立靜態方法
函式透過關鍵字 function 定義。函式同樣可以透過內建的 JavaScript 函式構造器(Function())定義。建構函式又稱為構造器。
建構函式也是一個普通的函式,命名以大寫字母開頭,從表現形式來說,和普通的函式沒有任何區別。
構造方法是一種特殊的方法:
- 構造方法名為 constructor()。
- 構造方法在建立新物件時會自動執行。
- 構造方法用於初始化物件屬性。
- 如果不定義構造方法,JavaScript 會自動新增一個空的構造方法
function Person(name, age) { this.name = name; this.age = age; this.describe = function() { //定義例項方法 return this.name + " is " + this.age + " years old"; }; } var person1 = new Person("Alice", 30); console.log(person1.describe()); // 輸出: Alice is 30 years old
建構函式內部定義方法是一種常見的做法,但這種方法會導致每個例項都會重新建立這些方法,從而佔用更多的記憶體。為了最佳化記憶體使用,通常推薦在建構函式的原型(prototype)上定義方法,這樣所有例項都會共享同一個方法,從而減少記憶體消耗。
因此上面的建議改成:
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.describe = function() { //定義靜態方法 return this.name + " is " + this.age + " years old"; }; var person2 = new Person("Bob",19)
2.透過類來建立例項和靜態方法
類是用於建立物件的模板
我們使用 class 關鍵字來建立一個類,類體在一對大括號 {} 中,我們可以在大括號 {} 中定義類成員的位置,如方法或建構函式。
每個類中包含了一個特殊的方法 constructor(),它是類的建構函式,這種方法用於建立和初始化一個由 class 建立的物件
按照建構函式形式建立類,不僅僅和編寫普通的函式過於相似,而且程式碼並不容易理解
.每個類都可以有一個自己的建構函式(方法),這個方法的名稱為固定的constructor
.每個類只能有一個constructor,如果包含多個建構函式,那麼會丟擲異常
.當我們透過new一個類的時候會呼叫這個類的constructor,這時new做的事情和new一個建構函式做的事情是一樣的。
// 定義一個名為Person的類 class Person { // 建構函式,用於建立類的例項 constructor(name, age) { this.name = name; this.age = age; } // 例項方法,用於列印物件資訊 printInfo() { console.log(`Name: ${this.name}, Age: ${this.age}`); } // 靜態方法 static jumping = function(){
console.log(this.name + '在jumping')
} } // 使用建構函式建立Person物件例項 const person2 = new Person('Bob', 30); person2.printInfo(); // 輸出: Name: Bob, Age: 30