当前位置:首页 > JavaScript

js实现claasFactory

2026-04-05 12:37:14JavaScript

JavaScript 实现 Class Factory

在 JavaScript 中,可以使用工厂函数或类工厂模式动态创建类。以下是一种常见的实现方式:

js实现claasFactory

使用工厂函数创建类

function createClass(properties) {
  return class {
    constructor(...args) {
      if (properties.constructor) {
        properties.constructor.apply(this, args);
      }
    }
  };
}

添加方法和属性

function createClass(properties) {
  const klass = class {
    constructor(...args) {
      if (properties.constructor) {
        properties.constructor.apply(this, args);
      }
    }
  };

  Object.keys(properties).forEach(key => {
    if (key !== 'constructor') {
      klass.prototype[key] = properties[key];
    }
  });

  return klass;
}

使用示例

const Person = createClass({
  constructor: function(name) {
    this.name = name;
  },
  sayHello: function() {
    console.log(`Hello, I'm ${this.name}`);
  }
});

const john = new Person('John');
john.sayHello(); // 输出: Hello, I'm John

支持继承

function createClass(properties, parentClass = Object) {
  const klass = class extends parentClass {
    constructor(...args) {
      super(...args);
      if (properties.constructor) {
        properties.constructor.apply(this, args);
      }
    }
  };

  Object.keys(properties).forEach(key => {
    if (key !== 'constructor') {
      klass.prototype[key] = properties[key];
    }
  });

  return klass;
}

静态方法支持

function createClass(properties, parentClass = Object) {
  const klass = class extends parentClass {
    constructor(...args) {
      super(...args);
      if (properties.constructor) {
        properties.constructor.apply(this, args);
      }
    }
  };

  Object.keys(properties).forEach(key => {
    if (key === 'static') {
      Object.keys(properties.static).forEach(staticKey => {
        klass[staticKey] = properties.static[staticKey];
      });
    } else if (key !== 'constructor') {
      klass.prototype[key] = properties[key];
    }
  });

  return klass;
}

完整实现示例

const Animal = createClass({
  constructor: function(name) {
    this.name = name;
  },
  eat: function() {
    console.log(`${this.name} is eating`);
  },
  static: {
    createRandom: function() {
      const names = ['Fluffy', 'Spot', 'Rover'];
      const randomName = names[Math.floor(Math.random() * names.length)];
      return new this(randomName);
    }
  }
});

const dog = Animal.createRandom();
dog.eat(); // 输出类似: Fluffy is eating

这种方法提供了灵活的方式来动态创建类,并支持继承、实例方法和静态方法。

标签: jsclaasFactory
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…