四种方法搞定JavaScript创建多个对象

1. 简单工厂模式

简单工厂模式是一种常见的JavaScript多个对象创建方式。该模式使用一个单独的函数来创建实例,该函数将接收参数并返回新的对象实例。

1.1 代码示例

function personFactory(name, age) {

const person = {};

person.name = name;

person.age = age;

person.sayHello = function () {

console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');

};

return person;

}

const person1 = personFactory('Amy', 18);

const person2 = personFactory('Bob', 20);

以上代码中,我们定义了一个personFactory函数,它接收两个参数nameage,并返回一个新创建的对象personperson包含一个sayHello方法,用于输出个人信息。

我们可以通过调用personFactory函数来创建多个不同的对象。例如,我们可以创建一个名为person1的对象,其name属性为Amyage属性为18。同样,我们可以创建另一个名为person2的对象,该对象属性值不同于person1

1.2 优缺点

优点:

简单、易于理解和实现;

创建的对象类型可以在运行时确定。

缺点:

每当需要创建一个新的对象时,必须调用工厂方法,导致了额外的开销;

无法识别对象的具体类型。

2. 构造函数模式

构造函数模式是一种常见的JavaScript多个对象创建方式。该模式使用构造函数来创建对象,同样可以基于该构造函数创建多个实例。

2.1 代码示例

function Person(name, age) {

this.name = name;

this.age = age;

this.sayHello = function () {

console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');

};

}

const person1 = new Person('Amy', 18);

const person2 = new Person('Bob', 20);

以上代码中,我们定义了一个Person构造函数,它接收两个参数nameage,并设置了nameage属性,以及sayHello方法。我们可以通过使用new运算符实例化Person对象来创建多个不同的对象实例,用变量来保存每个实例的引用。

2.2 优缺点

优点:

使用构造函数创建对象时,可以使用new关键字,使代码更具可读性,更像面向对象编程风格;

可以通过原型扩展对象的功能,提高代码复用率。

缺点:

每当需要创建一个新的对象时,必须调用构造函数,导致了额外的开销;

构造函数中定义的方法会在每个创建的对象实例中都创建一遍,无法复用,导致占用内存过多。

3. 原型模式

原型模式是一种常见的JavaScript多个对象创建方式。该模式使用原型来创建对象,同样可以基于该原型创建多个实例。

3.1 代码示例

function Person() {}

Person.prototype.name = 'Amy';

Person.prototype.age = 18;

Person.prototype.sayHello = function () {

console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');

};

const person1 = new Person();

const person2 = new Person();

以上代码中,我们定义了一个空的Person构造函数,然后使用prototype属性定义nameage属性和sayHello方法。我们创建两个新的Person实例对象,并可以通过实例对象进行属性和方法访问。

3.2 优缺点

优点:

每个对象都可以访问共享的原型对象上的属性和方法,不需要为每个对象都创建一遍实例方法,实例对象可以共享原型上的属性和方法;

内存占用更小。

缺点:

无法使用自身属性覆盖原型属性,可能会导致属性名称冲突和引用值共享问题;

原型中的属性和方法,是全局共享的,一旦被修改,所有对象的属性和方法都会受到影响。

4. 组合模式

组合模式是一种常见的JavaScript多个对象创建方式。该模式使用构造函数和原型的结合体来创建对象。

4.1 代码示例

function Person(name, age) {

this.name = name;

this.age = age;

}

Person.prototype.sayHello = function () {

console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');

};

const person1 = new Person('Amy', 18);

const person2 = new Person('Bob', 20);

以上代码中,我们使用构造函数来定义对象的属性nameage,然后使用prototype属性来定义对象的方法sayHello。我们可以通过使用new运算符来创建多个不同的对象实例,根据需要更改实例的属性值。

4.2 优缺点

优点:

结合了构造函数和原型的优点,同时避免了它们各自的缺点;

可以识别和访问对象实例的属性。

缺点:

结构和实现上相对复杂,容易出错。

总结

本文介绍了JavaScript中的四种常见创建多个对象的方式:简单工厂模式、构造函数模式、原型模式、组合模式。不同的模式适用于不同的场景,需要根据实际情况进行选择使用。在实践中应该根据具体业务情况,选择最合适的方式来创建对象。