在 JavaScript 中建立物件提供了多種方法。讓我們深入研究兩種主要模型:原型方式和閉包方式。
在原型模型中,物件從其基底類別的原型物件繼承屬性和方法。以下是一個範例:
function Shape(x, y) { this.x = x; this.y = y; } Shape.prototype.toString = function() { return 'Shape at ' + this.x + ', ' + this.y; }; // Subclass - Circle function Circle(x, y, r) { Shape.call(this, x, y); // Call the base class's constructor this.r = r; } // Set the prototype for the subclass Circle.prototype = new Shape(); Circle.prototype.toString = function() { return 'Circular ' + Shape.prototype.toString.call(this) + ' with radius ' + this.r; }; const myShape = new Shape(1, 2); const myCircle = new Circle(3, 4, 5);
此方法消除了建立物件時實例化基底類別的開銷。然而,它需要熟練的實現,以避免建構函數的複雜性。
在閉包方式中,每個實例都擁有自己的類別成員副本,消除了繼承。這是一個範例:
function Shape(x, y) { const that = this; this.x = x; this.y = y; this.toString = function() { return 'Shape at ' + that.x + ', ' + that.y; }; } // Subclass - Circle function Circle(x, y, r) { Shape.call(this, x, y); const that = this; this.r = r; const _baseToString = this.toString; this.toString = function() { return 'Circular ' + _baseToString.call(that) + ' with radius ' + that.r; }; } const myShape = new Shape(1, 2); const myCircle = new Circle(3, 4, 5);
此方法很有效,但需要詳細的方法覆蓋。當呼叫原始範圍之外的方法時,它也會帶來綁定挑戰。
原型和閉包之間的選擇取決於特定要求。原型適用於強 OO 繼承,而閉包適用於簡單的頁面效果。請記住,這兩種方法都有其複雜性和變化,理解它們的細微差別對於有效使用 JavaScript 物件至關重要。
以上是在 JavaScript 中建立物件時如何選擇原型方法和閉包方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!