classPerson { // 构造函数,用于初始化类的实例 constructor(name, age) { this.name = name; this.age = age; } // 实例方法 greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } // 静态方法 staticsayHello() { console.log('Hello from Person class'); } }
创建实例
使用 new 关键字创建类的实例。
1 2 3 4
const person1 = newPerson('Kimi', 25); person1.greet(); // Hello, my name is Kimi and I am 25 years old. const person2 = newPerson('Moonshot', 30); person2.greet(); // Hello, my name is Moonshot and I am 30 years old.
调用静态方法
静态方法可以通过类名直接调用,不需要创建实例。
1
Person.sayHello(); // Hello from Person class
类的继承
ES6 的类支持继承,可以使用 extends 关键字继承一个父类,并使用 super 关键字调用父类的构造函数和方法。
classPerson { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } staticsayHello() { console.log('Hello from Person class'); } } classEmployeeextendsPerson { constructor(name, age, jobTitle) { super(name, age); // 调用父类的构造函数 this.jobTitle = jobTitle; } greet() { super.greet(); // 调用父类的 greet 方法 console.log(`I am a ${this.jobTitle}.`); } staticsayHello() { console.log('Hello from Employee class'); } } const employee = newEmployee('Kimi', 25, 'Software Engineer'); employee.greet(); // Hello, my name is Kimi and I am 25 years old. I am a Software Engineer. Employee.sayHello(); // Hello from Employee class
通过使用 class 语法,JavaScript 的面向对象编程变得更加简洁和直观,同时也提供了更强大的功能,如继承和静态方法等。
// ES6 类 classPerson { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person = newPerson('Kimi', 25); person.greet(); // Hello, my name is Kimi and I am 25 years old.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// TypeScript 类 classPerson { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person = newPerson('Kimi', 25); person.greet(); // Hello, my name is Kimi and I am 25 years old.
2. 访问修饰符
ES6:ES6 的类不支持访问修饰符(如 public、private、protected)。
TypeScript:TypeScript 支持访问修饰符,可以明确指定类的属性和方法的访问权限。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classPerson { publicname: string; privateage: number; constructor(name: string, age: number) { this.name = name; this.age = age; } publicgreet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } privategetAge(): number { returnthis.age; } } const person = newPerson('Kimi', 25); person.greet(); // Hello, my name is Kimi and I am 25 years old. // person.getAge(); // 抛出错误:Property 'getAge' is private and only accessible within class 'Person'.
// ES6 类 classPerson { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person = newPerson('Kimi', '25'); // 运行时不会报错,但可能会导致逻辑错误 person.greet(); // Hello, my name is Kimi and I am 25 years old.
1 2 3 4 5 6 7 8 9 10 11 12 13
// TypeScript 类 classPerson { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person = newPerson('Kimi', '25'); // 编译时报错:Argument of type 'string' is not assignable to parameter of type 'number'.
classPerson { constructor(publicname: string, privateage: number) { } greet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person = newPerson('Kimi', 25); person.greet(); // Hello, my name is Kimi and I am 25 years old.