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
这种方法提供了灵活的方式来动态创建类,并支持继承、实例方法和静态方法。






