js中创建多个对象的两种方法

本文探讨了JavaScript中两种创建对象的方法:工厂模式和自定义构造函数。工厂模式通过函数创建对象,但存在对象识别和资源浪费问题。构造函数则提供更好的对象识别,并与new运算符配合使用,为对象实例化时初始化属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.工厂模式创建对象

   function createPerson(name, age, hobby) {
      var obj = new Object();
      obj.name = name;
      obj.age = age;
      obj.hobby = hobby
      obj.say= function () {
        console.log(this.name + "喜欢" + hobby);
      };
      return obj;
    }
    // 测试
    var p1=createPerson('张三',22,'踢足球');
    var p2=createPerson('李四',18,'打游戏');
    p1.say();//张三喜欢踢足球
    p2.say();//李四喜欢打游戏
    console.log(p1 instanceof Object);//true
    console.log(p1 instanceof createPerson);//false

工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,用instanceof只能辨别实例是一个对象,而无法辨别这个实例是谁的对象。而且每生成一个实例就会增加一些重复的内容,会造成资源浪费。

2.自定义构造函数创建对象

  function Person(name,age,hobby){
    this.name=name;
    this.age=age;
    this.hobby=hobby;
    this.say=function(){
      console.log(this.name + "喜欢" + hobby);
    }
  }
  var p1=new Person('张三',22,'踢足球');
  var p2=new Person('李四',18,'打游戏');
  p1.say();//张三喜欢踢足球
  p2.say();//李四喜欢打游戏
  console.log(p1 instanceof Object);//true  即p1是Object的实例
  console.log(p1 instanceof Person);//true  即p2是Person的实例

构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。使用构造函数时要注意以下几点:

1.构造函数首字母要大写(推荐做法)。
2.构造函数要和new一起使用才有意义。
3.构造函数的作用是用于实例化一个对象,即给对象添加属性和方法。
使用new操作符给 Person创建一个新实例会经历以下四个步骤:
(1)创建一个新对象
(2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
(3)执行构造函数中的代码(为这个新对象添加属性)
(4)返回新对象
使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍

<think>我们正在处理用户的问题:"我想了解如何在JavaScript中创建一个对象数组请问如何在JavaScript中创建对象数组示例代码"根据系统指令,我们需要:1.使用中文回答2.行内数学表达式用$...$,独立公式用$$...$$3.生成相关问题4.回答结构清晰,帮助用户逐步解决问题同时,我们注意到用户引用了两个参考:引用[1]:关于JavaScript中map()方法的介绍(但用户问题不涉及map,可能只是示例引用)引用[2]:关于Matlab中创建对象数组的方法(用户问题明确在JavaScript中)用户当前的问题非常明确:在JavaScript中创建对象数组,并需要示例代码。由于用户的问题不涉及数学公式,因此我们可能不需要使用LaTeX数学表达式,但如果有涉及(比如数组长度等),我们可以用行内格式。我们将按照以下步骤回答:1.解释JavaScript中的对象和数组2.创建对象数组的几种方法3.提供示例代码4.生成相关问题注意:引用[1]提到map(),虽然用户问题不直接涉及,但在创建对象数组后可能用于处理数组,因此可以在示例中适当展示,但不是必须。我们不需要引用[2]的Matlab方法,因为用户明确要求JavaScript。但是,用户引用了这两个引用,所以我们可以在适当的地方提及(比如在对比或扩展时),但不必强求。由于用户的问题不涉及之前的问题,我们直接回答即可。开始回答:</think>### 在 JavaScript 中创建对象数组 在 JavaScript 中,对象数组是通过组合对象字面量和数组实现的。以下是创建和使用对象数组的详细方法和示例: #### 基础创建方法 1. **直接声明法**:直接使用数组字面量包含多个对象 ```javascript // 创建包含3个用户对象的数组 const users = [ { id: 1, name: "Alice", age: 25 }, { id: 2, name: "Bob", age: 30 }, { id: 3, name: "Charlie", age: 35 } ]; ``` 2. **构造函数法**:先定义构造函数,再创建实例数组 ```javascript // 1. 定义构造函数 function User(id, name, age) { this.id = id; this.name = name; this.age = age; } // 2. 创建对象数组 const userArray = [ new User(1, "Alice", 25), new User(2, "Bob", 30), new User(3, "Charlie", 35) ]; ``` #### 动态操作方法 1. **添加元素**: ```javascript users.push({ id: 4, name: "David", age: 28 }); // 末尾添加 ``` 2. **访问元素**: ```javascript console.log(users[0].name); // 输出: "Alice" ``` 3. **遍历数组**(使用 `map()`): ```javascript const names = users.map(user => user.name); // 结果: ["Alice", "Bob", "Charlie"] ``` #### 完整示例 ```javascript // 创建产品对象数组 const products = [ { id: "P001", name: "Laptop", price: 999.99, inStock: true }, { id: "P002", name: "Mouse", price: 25.50, inStock: true }, { id: "P003", name: "Keyboard", price: 45.75, inStock: false } ]; // 添加新产品 products.push({ id: "P004", name: "Monitor", price: 199.99, inStock: true }); // 过滤有库存的产品 const availableProducts = products.filter(p => p.inStock); // 提取价格列表 const prices = products.map(p => p.price); console.log(availableProducts); console.log("平均价格:", (prices.reduce((sum, price) => sum + price, 0) / prices.length).toFixed(2) ); ``` #### 关键概念说明 - **对象字面量**:`{ key: value }` 语法直接创建对象 - **数组方法**: - `push()` 添加元素到数组末尾 - `map()` 转换数组元素(引用[^1]) - `filter()` 按条件筛选元素 - **点运算符**:`obj.key` 访问对象属性 JavaScript 对象数组在数据处理、API 响应和状态管理(如 React 组件状态)中广泛应用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值