JavaScript 面向对象【快速掌握知识点】
创始人
2024-05-27 05:57:12
0

目录

类和对象

属性和方法

继承

多态

封装


类和对象

类是用于定义对象的模板或蓝图;它包含对象的属性和方法,我们可以使用class关键字来定义类。

class Person {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);}
}

在上面的例子中,我们定义了一个名为Person的类,它有两个属性:nameage,以及一个方法sayHello,构造函数constructor用于初始化对象的属性。

对象是类的一个实例,我们可以使用new关键字来创建对象。

let person1 = new Person('Alice', 25);

在上面的例子中,我们创建了一个名为person1Person对象,并将其属性初始化为Alice25

属性和方法

属性是对象的特征或状态。它们用于描述对象的特点。我们可以在构造函数中初始化对象的属性。

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

在上面的例子中,我们定义了一个Person类,并在构造函数中初始化了两个属性:nameage

方法是对象的行为或操作。它们用于描述对象的行为。在类中,我们可以定义一组方法,以便对对象执行不同的操作。

class Person {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);}
}

在上面的例子中,我们定义了一个sayHello方法,它用于输出对象的属性。

继承

继承是面向对象编程的一个重要概念。它允许我们从现有的类创建新类,从而在不重复代码的情况下扩展现有的功能。在JavaScript中,我们可以使用extends关键字来创建一个新类,它从现有的类继承属性和方法。

class Student extends Person {constructor(name, age, grade) {super(name, age);this.grade = grade;}sayHello() {console.log(`Hello, my name is ${this.name}, I am ${this.age} years old, and I am in grade ${this.grade}.`);}
}

在上面的例子中,我们定义了一个名为Student的新类,它从现有的Person类继承了nameage属性和sayHello方法。Student类还有一个名为grade的新属性,并覆盖了sayHello方法以添加新信息。

多态

多态是面向对象编程的另一个重要概念。它允许不同的类实现相同的方法,以便在不同的情况下以不同的方式处理相同的请求。在JavaScript中,我们可以使用相同的方法名在不同的类中实现不同的行为。

class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}class Dog extends Animal {speak() {console.log(`${this.name} barks.`);}
}class Cat extends Animal {speak() {console.log(`${this.name} meows.`);}
}const animals = [new Dog('Fido'),new Cat('Fluffy'),new Dog('Max'),new Cat('Whiskers')
];animals.forEach(animal => {animal.speak();
});

在上面的例子中,我们定义了一个名为Animal的基类,并从中派生出DogCat类。这两个类都实现了Animalspeak方法,并在方法中以不同的方式输出信息。最后,我们创建了一些DogCat的实例,并在它们上面调用speak方法,以验证它们会输出不同的信息。

封装

当使用面向对象编程时,我们通常会封装数据和方法以确保对象的安全性和可维护性。在JavaScript中,封装是通过创建类和使用访问修饰符来实现的。

// 创建一个类
class Person {// 声明私有属性#name;#age;// 构造函数,用于初始化对象constructor(name, age) {this.#name = name;this.#age = age;}// 声明公有方法,用于访问私有属性getName() {return this.#name;}getAge() {return this.#age;}
}// 创建一个Person对象
const person = new Person('张三', 18);// 访问私有属性(会报错)
console.log(person.#name); // Uncaught SyntaxError: Private field '#name' must be declared in an enclosing class// 访问公有方法
console.log(person.getName()); // '张三'
console.log(person.getAge()); // 18

相关内容

热门资讯

数字华夏完成天使+轮融资 深圳... (转自:观点网)观点网讯:7月14日,深圳具身智能企业数字华夏宣布已完成天使+轮融资,并正启动第二轮...
今日谈:破除“内卷式”竞争,夯... 本文转自【人民日报】原标题:破除“内卷式”竞争,夯实发展之基(今日谈)今年上半年,我国汽车产销量首次...
“烟草虎”张天峰,被开除党籍! 2025.07.14本文字数:550,阅读时长大约1分钟封图 | 张天峰 资料图据中央纪委国家监委网...
这座新桥,开放试通行! 转自:珠海发布街坊好友们,您的心事小布愿意听。小布对于大家的“急难愁盼”,不仅会掏出小本本认真记录,...
鲍威尔又遇辞退风险?特朗普顾问...   白宫经济顾问凯文·哈塞特上周日表示,美联储主席杰罗姆·鲍威尔的职位可能面临风险,具体取决于其对美...
【法治副校长牵手法治小记者】以... 来源:法治日报 法治日报全媒体记者 王春 通讯员 许高悦法治副校长:俞露烟,女,1982年出生,现任...
东莞控股跌2.04%,成交额6... 7月14日,东莞控股盘中下跌2.04%,截至11:12,报11.02元/股,成交6040.71万元,...
巨力索具跌2.03%,成交额6... 7月14日,巨力索具盘中下跌2.03%,截至11:12,报7.25元/股,成交6.48亿元,换手率9...
晋拓股份涨2.61%,成交额6... 7月14日,晋拓股份盘中上涨2.61%,截至11:12,报18.47元/股,成交6564.05万元,...
国补政策确认本月恢复第二阶段7... “补贴是不是提前结束了?” 过去两周,不少消费者在申领家电、手机 “以旧换新” 补贴时,页面突然提示...