能否提供一个复杂的JavaScript代码示例,展示如何运用面向对象编程的概念和技术?
时间: 2024-12-17 13:25:41 浏览: 2
当然可以。下面是一个复杂的JavaScript代码示例,展示了如何使用面向对象编程(OOP)的基本概念:
```javascript
// 定义一个Person类
class Person {
// 构造函数
constructor(name, age) {
this.name = name;
this.age = age;
}
// 属性封装,私有属性
_address = '';
// 公共方法获取地址
getAddress() {
return this._address;
}
// 设置地址,使用getter和setter保护数据安全
setAddress(address) {
if (typeof address === 'string') {
this._address = address;
} else {
console.error('Invalid address type');
}
}
// 实现继承,派生Employee类
workAt(company) {
this.company = company;
console.log(`${this.name} is working at ${company}`);
}
// 面向对象特性 - 封装和隐藏内部细节
_calculateSalary(baseSalary, bonus) {
const salary = baseSalary + (bonus * 0.1);
return salary.toFixed(2);
}
// 实现多态,返回员工的年收入
getAnnualIncome() {
if (this instanceof Employee) { // 判断是否为Employee实例
return this._calculateSalary(this.salary, this.bonus);
} else {
throw new Error('Cannot calculate income for non-Employee');
}
}
}
// 创建Person对象
const person1 = new Person('John', 30);
// 设置和获取地址
person1.setAddress('New York');
console.log(person1.getAddress());
// 创建Employee子类并继承Person属性和方法
class Employee extends Person {
constructor(name, age, salary, bonus) {
super(name, age);
this.salary = salary;
this.bonus = bonus;
}
}
// 使用多态计算Employee的年薪
const employee1 = new Employee('Jane', 35, 60000, 10000);
console.log(employee1.getAnnualIncome());
```
在这个例子中,我们创建了一个`Person`类,并实现了构造函数、属性、方法、继承、封装以及多态性。
阅读全文