首页 >web前端 >js教程 >在 JavaScript 中创建自定义对象的原型设计和闭包方法有哪些?

在 JavaScript 中创建自定义对象的原型设计和闭包方法有哪些?

Patricia Arquette
Patricia Arquette原创
2024-12-14 16:54:10418浏览

What are the Prototyping and Closure Ways to Create Custom Objects in JavaScript?

如何在 JavaScript 中“正确”创建自定义对象

创建自定义对象

有两种主要方法在 JavaScript 中创建自定义对象:原型方法和闭包

原型化方式

使用此方法,对象的属性和方法都在其原型上定义。以下示例创建一个 Shape 对象和一个对该 Shape 进行子类化的 Circle 对象:

function Shape(x, y) {
  this.x = x;
  this.y = y;
}

Shape.prototype.toString = function() {
  return 'Shape at ' + this.x + ', ' + this.y;
};

function Circle(x, y, r) {
  Shape.call(this, x, y); // Invoke base class constructor
  this.r = r;
}

Circle.prototype = new Shape(); // Create prototype inheritance link

Circle.prototype.toString = function() {
  return 'Circular ' + Shape.prototype.toString.call(this) + ' with radius ' + this.r;
};

Closure Way

此方法不使用继承。相反,每个实例都有自己的属性和方法副本。

function Shape(x, y) {
  var that = this;

  this.x = x;
  this.y = y;

  this.toString = function() {
    return 'Shape at ' + that.x + ', ' + that.y;
  };
}

function Circle(x, y, r) {
  var that = this;

  Shape.call(this, x, y); // Invoke base class constructor
  this.r = r;

  var _baseToString = this.toString;
  this.toString = function() {
    return 'Circular ' + _baseToString.call(that) + ' with radius ' + that.r;
  };
};

优点和缺点

原型制作方式

  • 优点:对于大型物体高效hierarchies
  • 缺点:实现起来比较复杂,instanceof操作符

闭包方式

  • 优点:实现起来比较简单,独立实例
  • 缺点:效率较低,没有直接instanceof支持

选择正确的方法

选择取决于项目的具体要求。对于具有多个继承级别的大型对象层次结构,原型可能是首选。对于简单、独立的对象,封闭方式往往更方便。

以上是在 JavaScript 中创建自定义对象的原型设计和闭包方法有哪些?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn