星期三 , 22 1 月 2025

Javascript面向对象OOP基础知识

面向对象编程(Object-Oriented Programming, OOP)是编程中的一种思想和方法论,主要通过“对象”和“类”来组织代码,以提高代码的可维护性和可重用性。JavaScript 作为一种多范式编程语言,也支持面向对象编程。以下是 JavaScript 面向对象编程的基础知识:

1. 对象

对象是 JavaScript 中的基本数据结构之一。它由属性和方法组成,属性是对象的状态(数据),方法是对象的行为(函数)。

javascriptCopy code// 创建一个对象
let person = {
    name: "John",
    age: 30,
    greet: function() {
        console.log("Hello, my name is " + this.name);
    }
};

// 访问对象的属性
console.log(person.name); // 输出: John

// 调用对象的方法
person.greet(); // 输出: Hello, my name is John

2. 类与构造函数

类是面向对象编程中的一个重要概念,它是对象的蓝图或模板。在 JavaScript 中,可以使用构造函数(在 ES6 之前)或 class 关键字(在 ES6 中引入)来定义类。

2.1 使用构造函数定义类

javascriptCopy codefunction Person(name, age) {
    this.name = name;
    this.age = age;
    this.greet = function() {
        console.log("Hello, my name is " + this.name);
    };
}

let john = new Person("John", 30);
john.greet(); // 输出: Hello, my name is John

2.2 使用 class 关键字定义类

javascriptCopy codeclass Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    greet() {
        console.log("Hello, my name is " + this.name);
    }
}

let john = new Person("John", 30);
john.greet(); // 输出: Hello, my name is John

3. 继承

继承是面向对象编程中的一个核心概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。

javascriptCopy codeclass Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(this.name + " makes a sound.");
    }
}

class Dog extends Animal {
    constructor(name, breed) {
        super(name); // 调用父类的构造函数
        this.breed = breed;
    }

    speak() {
        console.log(this.name + " barks.");
    }
}

let dog = new Dog("Buddy", "Golden Retriever");
dog.speak(); // 输出: Buddy barks.

4. 多态

多态是指在父类中定义的某些方法可以在子类中有不同的实现。

javascriptCopy codeclass Animal {
    speak() {
        console.log("Animal makes a sound.");
    }
}

class Dog extends Animal {
    speak() {
        console.log("Dog barks.");
    }
}

class Cat extends Animal {
    speak() {
        console.log("Cat meows.");
    }
}

let animals = [new Dog(), new Cat()];

animals.forEach(animal => {
    animal.speak(); // Dog barks. Cat meows.
});

5. 封装

封装是指将对象的属性和方法限制在对象内部,外部代码不能直接访问或修改对象的内部状态。这通常通过将属性设为私有,并提供公共方法来访问这些属性来实现。

在 JavaScript 中,可以通过使用 # 符号(ES6 私有字段)或闭包来实现封装。

5.1 使用 # 符号实现封装

javascriptCopy codeclass Person {
    #name; // 私有属性

    constructor(name) {
        this.#name = name;
    }

    getName() {
        return this.#name;
    }
}

let person = new Person("John");
console.log(person.getName()); // 输出: John
console.log(person.#name); // 报错: SyntaxError: Private field '#name' must be declared in an enclosing class

面向对象编程通过“类”和“对象”来组织代码,使得代码更具模块化、可重用性和可维护性。掌握对象、类、继承、多态和封装这些基本概念是深入理解面向对象编程的关键。

Check Also

获取input的keyup或者input状态只获取一次值避免无限重复值

$(document).rea …

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注