JavaScript 是一種面向對象的編程語言,對象是其編程范式的核心。在 JavaScript 中,對象是值,可以包含屬性和方法,常用于實現數據存儲和操作。
JavaScript 對象不同于傳統的類,它是一種基于原型的面向對象模型。在原型繼承模型中,每個對象都有一個原型對象,它充當了對象屬性和方法的默認值。如果某個屬性或方法在當前對象中沒有找到,JavaScript 引擎會在原型對象中遞歸查找,直至找到或到達原型鏈的末尾。
// 創建原型對象 var animal = { name: 'Unknown', speak: function() { console.log('The ' + this.name + ' speaks.'); } }; // 創建一個狗對象 var dog = Object.create(animal); dog.name = 'Dog'; // 調用 speak 方法 dog.speak(); // 輸出 "The Dog speaks."
上述代碼中,我們通過 Object.create() 方法從原型對象 animal 中創建了一個狗對象 dog。由于 dog 沒有定義 speak 方法,它會從原型對象 animal 中繼承該方法,并在通過 this 關鍵字引用其 name 屬性。最終,我們成功地輸出了 "The Dog speaks."。
在 JavaScript 中,對象的屬性可以分為數據屬性和訪問器屬性。數據屬性包含一個屬性值,可以是任意 JavaScript 類型,訪問器屬性包含 getter 和 setter 方法,可以用于定義屬性的讀寫行為。
// 創建一個人對象 var person = { firstName: '', lastName: '', get fullName() { return this.firstName + ' ' + this.lastName; }, set fullName(name) { var parts = name.split(' '); this.firstName = parts[0]; this.lastName = parts[1]; } }; // 設置 fullName 屬性 person.fullName = 'John Smith'; // 輸出 firstName 和 lastName 屬性 console.log(person.firstName); // 輸出 "John" console.log(person.lastName); // 輸出 "Smith" // 輸出 fullName 訪問器屬性 console.log(person.fullName); // 輸出 "John Smith"
上述代碼中,我們利用訪問器屬性 fullName 來定義了人對象 person 的全名屬性。通過設置 setter 方法,我們成功地解析出了該屬性的姓和名并保存到相應的數據屬性中。
總的來說,JavaScript 對象類是一種靈活并且易于擴展的編程范式,它能夠幫助開發者快速地實現復雜的數據結構和邏輯。