JavaScript 中的面向对象编程160



JavaScript 是一种多范式的语言,支持面向对象编程 (OOP),这是一种将程序组织成对象和类的结构化方式。OOP 的核心原则是封装、继承和多态性,它使代码更易于管理和维护。

创建对象

在 JavaScript 中,可以使用两种方式创建对象:对象字面量和构造函数。对象字面量用于创建单个对象,而构造函数用于基于蓝图创建多个对象。

对象字面量



const person = {
name: "John",
age: 30,
greet: function() {
("Hello, my name is " + );
}
};

构造函数



function Person(name, age) {
= name;
= age;
= function() {
("Hello, my name is " + );
}
}
const person1 = new Person("John", 30);
const person2 = new Person("Mary", 25);

ES6 引入了类,这是一种语法糖,使创建和管理对象变得更加容易。类还提供了一些额外的特性,如存取器、静态方法和继承。
class Person {
constructor(name, age) {
= name;
= age;
}
greet() {
("Hello, my name is " + );
}
get fullName() {
return + " " + ;
}
static create(name, age) {
return new Person(name, age);
}
}

继承

继承是创建新类(子类)的能力,它继承另一个现有的类(父类)的行为和属性。子类可以覆写或扩展父类的方法,使其具有更具体的行为。
class Employee extends Person {
constructor(name, age, salary) {
super(name, age); // 调用父类构造函数
= salary;
}
getSalary() {
return ;
}
}

多态性

多态性是指对象的行为可以根据它们的实际类型而变化。这允许在基类上定义方法,并在派生类中以不同的方式实现它们。
class Animal {
speak() {
("Animal speaks...");
}
}
class Dog extends Animal {
speak() {
("Dog barks...");
}
}
class Cat extends Animal {
speak() {
("Cat meows...");
}
}
const animal = new Animal();
(); // Animal speaks...
const dog = new Dog();
(); // Dog barks...
const cat = new Cat();
(); // Cat meows...

封装

封装是隐藏对象内部细节并仅公开其公共接口的概念。在 JavaScript 中,可以使用闭包或私有属性来实现封装。

闭包



function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
(counter()); // 1
(counter()); // 2

私有属性


ES6 引入了私有属性,可以使用 # 符号声明。私有属性只能在对象内部访问。
class Person {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
const person = new Person("John");
(()); // John
(person.#name); // undefined

优点
代码的可重用性和可维护性提高
提高代码的组织性和结构
通过继承实现代码的扩展性
通过多态性提高代码的灵活性
通过封装提高代码的安全性

缺点
代码的复杂性可能增加
可能难以调试
不适用于所有情况,有时过程式编程可能更合适


面向对象编程是 JavaScript 中一种有用的范例,它提供了一系列好处,包括代码可重用性、可维护性和可扩展性。通过对象、类、继承、多态性和封装,JavaScript 程序员可以创建结构良好、易于管理和易于维护的应用程序。

2024-12-13


上一篇:逼格满分的 Javascript 数据库深度解析

下一篇:Python 到 JavaScript 的转换