JavaScript 对象

  1. JavaScript 对象是属性和方法的集合。
  2. JavaScript 对象是拥有属性和方法的实体。
  3. 对象是类的实例。
  4. 对象是 JavaScript 中的复合数据类型,用于存储键值对的集合和方法。
键值对形式:key: value
键是字符串(或符号),值可以是任意数据类型。

创建对象

  1. 使用对象字面量创建对象new Object()
     const person = {
        name: "John",
        age: 30,
        sayHello: function() {
        console.log("Hello, my name is " + this.name);
        }
    };
     console.log(person.name);       
     console.log(person.sayHello()); 
    

优点‌:简洁直观,适合创建简单的对象。使用对象字面量创建对象是最简单的方式,可以直接定义对象的结构和属性‌。
缺点‌:不支持动态创建对象,适用于静态结构。
```
const person = new Object();
person.name = '张三';
person.age = 20;

 console.log(person); // 输出: { name: 'Bob', age: 30 }
 ```  
  1. 使用构造函数创建对象 new Object()
     function Person(name, age) {
       this.name = name;
       this.age = age;
       this.S = function() {
         console.log("Hello, my name is " + this.name);
       };
     }
     const person = new Person("John", 30);
     console.log(person.name);       
     console.log(person.sayHello());
    

优点‌:可以动态创建对象,适用于动态结构。使用构造函数创建对象可以在运行时动态地添加属性和方法。
缺点‌:需要定义构造函数,可能会增加代码量。

const prototype = { greet: function () { return 'Hello'; } };
const obj = Object.create(prototype);
console.log(obj.greet()); // 

操作对象

  1. 访问属性
     点操作符
     console.log(person.name); // 
     方括号操作符
     console.log(person['name']);
    
  2. 添加属性
     person.address = '123 Main St';
    
  3. 删除属性
     delete person.age;
    
  4. 遍历属性
     for (let key in person) {
      console.log(key + ': ' + person[key]);
    }
    
  5. 修改属性
     person.age = 26;
     person['name'] = 'tom';
     console.log(person); // 
    

对象的高级用法

  1. 对象方法
    对象中的方法是赋值给属性的函数:
    const calc = {
     add(a, b) {
         return a + b;
     },
     multiply(a, b) {
         return a * b;
     }
    };
    console.log(calc.add(2, 3)); // 输出: 
    
  2. 对象解构
    解构用于快速提取属性值:
      const { name, age } = person;
      console.log(name, age); 
    
  3. 原型继承
    原型继承允许对象继承其他对象的属性和方法:
     const person = {
         name: '张三',
         age: 20
     };
     const student = Object.create(person);
     student.sayHello = function() {
         console.log('Hello, my name is ' + this.name);
     };
     student.sayHello(); // 输出: Hello, my name is 张三
    
  4. 合并对象
    合并对象可以将多个对象的属性合并到一个对象中:
    Object.assign()
     const obj1 = { a: 1, b: 2 };
     const obj2 = { c: 3, d: 4 };
     const mergedObj = Object.assign({}, obj1, obj2);
     console.log(mergedObj); // 输出: { a: 1, b: 2, c: 3, d: 4 }
    
    扩展运算符
     const obj1 = { a: 1, b: 2 };
     const obj2 = { c: 3, d: 4 };
     const mergedObj = {...obj1,...obj2 };
     console.log(mergedObj); // 输出: { a: 1, b: 2, c: 3, d: 4 }
    
  5. 对象冻结与密封
    冻结对象可以防止属性被添加、修改或删除:
    Object.freeze(obj);
    const obj = Object.freeze({ a: 1 });
    obj.a = 2; // 无效
    
    密封对象可以防止属性被添加或删除,但可以修改属性的值:
    Object.seal(obj);
    const obj = Object.seal({ a: 1 });
    obj.a = 2; // 有效
    obj.b = 3; // 无效