javascript 之对象与原型(抄AI的)

0 阅读1分钟

在JavaScript中,对象和原型是理解语言的核心概念,它们涉及到如何创建和组织数据,以及实现继承和构造函数的机制。以下是有关对象与原型的重要概念和特性:

一、对象

1. 对象的定义

对象是JavaScript中最常用的数据结构,它是一个无序的键值对集合,键(属性名)可以是字符串或符号,值可以是任何类型的值(包括其他对象)。

2. 创建对象的方法

  • 对象字面量:

    javascript
    const person = {  
        name: 'Alice',  
        age: 30,  
        greet: function() {  
            console.log(`Hello, my name is ${this.name}`);  
        }  
    };  
    
  • 使用构造函数:

    javascript
    function Person(name, age) {  
        this.name = name;  
        this.age = age;  
        this.greet = function() {  
            console.log(`Hello, my name is ${this.name}`);  
        };  
    }  
    
    const alice = new Person('Alice', 30);  
    
  • Object.create()方法:

    javascript
    const proto = {  
        greet: function() {  
            console.log(`Hello, my name is ${this.name}`);  
        }  
    };  
    
    const alice = Object.create(proto);  
    alice.name = 'Alice';  
    

3. 对象的属性

  • 访问和修改属性:

    javascript
    console.log(alice.name);  // Alice  
    alice.age = 31;           // 修改属性  
    
  • 删除属性:

    javascript
    delete alice.age;        // 删除属性  
    

二、JavaScript的原型

1. 原型的定义

每个JavaScript对象都有一个原型(prototype),原型也是一个对象,所有从这个对象实例化的对象都可以访问原型上的属性和方法。

2. 原型链

当访问对象的属性或方法时,JavaScript首先检查对象自身,如果不存在,则会查找其原型,如果原型仍不存在,则继续向上查找原型的原型,直到找到或到达null

3. 创建原型链的方式

  • 构造函数的原型:

    javascript
    function Person(name, age) {  
        this.name = name;  
        this.age = age;  
    }  
    
    Person.prototype.greet = function() {  
        console.log(`Hello, my name is ${this.name}`);  
    };  
    
    const bob = new Person('Bob', 25);  
    bob.greet();  // Hello, my name is Bob  
    
  • 原型的继承:

    javascript
    function Student(name, age, major) {  
        Person.call(this, name, age); // 调用父构造函数  
        this.major = major;  
    }  
    
    Student.prototype = Object.create(Person.prototype); // 继承父原型  
    Student.prototype.constructor = Student; // 修复构造函数指针  
    
    const charlie = new Student('Charlie', 20, 'Math');  
    charlie.greet();  // Hello, my name is Charlie  
    

4. Object.getPrototypeOf()

可以使用该方法获取对象的原型:

javascript
const proto = Object.getPrototypeOf(bob);  
console.log(proto); // Person.prototype  

5. hasOwnProperty()

该方法用于检查对象自身是否具有指定属性,而不是通过原型链继承的:

javascript
console.log(bob.hasOwnProperty('name')); // true  
console.log(bob.hasOwnProperty('greet')); // false  

6. instanceof

用于检查对象是否是某个构造函数的实例,也可以追踪原型链:

javascript
console.log(bob instanceof Person); // true  
console.log(bob instanceof Object); // true