当前位置:首页 > JavaScript

js实现claasFactory

2026-04-05 12:37:14JavaScript

js实现claasFactory

js实现claasFactory

JavaScript 实现 Class Factory

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

使用工厂函数创建类

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
分享给朋友:

相关文章

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…