Class 与面向对象编程 
题目1: ES6 中如何定义类?类与传统构造函数的区别? 
答案: ES6 中使用 class 关键字定义类:
javascript
class Person {
    constructor(name) {
        this.name = name;
    }
    sayHello() {
        console.log(`Hello, I'm ${this.name}`);
    }
}主要区别:
- 语法更清晰、更面向对象
- 类声明不会被提升,而函数声明会被提升
- 类中的代码自动运行在严格模式下
- 类的方法不可枚举
扩展: 尽管语法不同,ES6 的类本质上还是基于原型的继承。
题目2: 什么是 super?如何在继承中使用? 
答案: super 关键字用于调用父类的构造函数或访问父类的方法。
在构造函数中使用:
javascript
class Animal {
    constructor(name) {
        this.name = name;
    }
}
class Dog extends Animal {
    constructor(name, breed) {
        super(name); // 调用父类构造函数
        this.breed = breed;
    }
}在方法中使用:
javascript
class Dog extends Animal {
    speak() {
        super.speak(); // 调用父类的 speak 方法
        console.log('Woof!');
    }
}扩展: 在静态方法中,super 指向父类本身,而不是父类的原型对象。
题目3: 如何实现私有属性和方法? 
答案: ES2022 引入了私有属性和方法,使用 # 前缀:
javascript
class Person {
    #age = 0;
    constructor(name) {
        this.name = name;
    }
    #privateMethod() {
        console.log('This is private');
    }
    getAge() {
        return this.#age;
    }
}扩展: 在 ES2022 之前,通常使用闭包或 Symbol 来模拟私有属性和方法。
题目4: 什么是静态方法和静态属性? 
答���: 静态方法和属性属于类本身,而不是类的实例。使用 static 关键字定义:
javascript
class MathOperations {
    static PI = 3.14159;
    static square(x) {
        return x * x;
    }
}
console.log(MathOperations.PI); // 3.14159
console.log(MathOperations.square(2)); // 4扩展: 静态方法通常用于实现不需要访问实例属性的功能。
题目5: 如何实现多重继承? 
答案: JavaScript 不直接支持多重继承,但可以使用混入(Mixin)模式来模拟:
javascript
const canSwim = {
    swim() {
        console.log('Swimming...');
    }
};
const canFly = {
    fly() {
        console.log('Flying...');
    }
};
class Bird {
    constructor(name) {
        this.name = name;
    }
}
Object.assign(Bird.prototype, canFly, canSwim);
const bird = new Bird('Sparrow');
bird.fly(); // Flying...
bird.swim(); // Swimming...扩展: 这种方法可以实现类似多重继承的效果,但要注意可能的命名冲突。