在 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中文网其他相关文章!