首页 > web前端 > js教程 > 原型与闭包:哪种 JavaScript 对象创建方法适合您?

原型与闭包:哪种 JavaScript 对象创建方法适合您?

DDD
发布: 2024-12-11 04:37:09
原创
691 人浏览过

Prototype vs. Closure: Which JavaScript Object Creation Method is Right for You?

自定义 JavaScript 对象的正确实现

JavaScript 提供了两种不同的方法来创建具有属性和方法的自定义对象:原型方式和闭包方式。

Prototype Way

这种方法对于 JavaScript 来说更加原生,并且利用了构造函数的原型查找属性

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 constructor
  this.r = r;
}
Circle.prototype = new Shape(); // Set subclass prototype

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

闭包方式

此方法完全避免了原型继承,为每个实例创建一个新的闭包。

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 constructor
  this.r = r;
  var _baseToString = this.toString;
  this.toString = function() {
    return 'Circular ' + _baseToString.call(that) + ' with radius ' + this.r;
  };
}

var myCircle = Circle(); // Using `new` is optional here
登录后复制

选择和注意事项

两种方法各有优点

原型方式

  • 重对象继承效率更高
  • 原生JavaScript,方便使用instanceof
  • 需要正确的构造函数调用子类

闭包方式

  • 每个实例都有自己的方法副本(效率较低)
  • 简化方法的绑定实例
  • 不支持instanceof,需要自定义检查

最终,最佳选择取决于具体的项目要求和偏好。

以上是原型与闭包:哪种 JavaScript 对象创建方法适合您?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板