TypeScript面向对象实例:
代码语言:javascript复制class Car {
private _make: string;
private _model: string;
private _year: number;
constructor(make: string, model: string, year: number) {
this._make = make;
this._model = model;
this._year = year;
}
get make(): string {
return this._make;
}
set make(make: string) {
this._make = make;
}
get model(): string {
return this._model;
}
set model(model: string) {
this._model = model;
}
get year(): number {
return this._year;
}
set year(year: number) {
this._year = year;
}
drive(): void {
console.log(`Driving a ${this._year} ${this._make} ${this._model}`);
}
}
class SportsCar extends Car {
private _topSpeed: number;
constructor(make: string, model: string, year: number, topSpeed: number) {
super(make, model, year);
this._topSpeed = topSpeed;
}
get topSpeed(): number {
return this._topSpeed;
}
set topSpeed(topSpeed: number) {
this._topSpeed = topSpeed;
}
drive(): void {
console.log(`Driving a ${this.year} ${this.make} ${this.model} at top speed ${this._topSpeed}`);
}
}
let myCar: Car = new Car("Ford", "Mustang", 2021);
myCar.drive();
let mySportsCar: SportsCar = new SportsCar("Lamborghini", "Aventador", 2021, 350);
mySportsCar.drive();
输出结果如下:
代码语言:javascript复制Driving a 2021 Ford Mustang
Driving a 2021 Lamborghini Aventador at top speed 350
var可以进行变量提升,而let是块级作用域,不可以进行变量提升。
在JavaScript中,变量提升指的是在代码执行之前,JavaScript引擎会将所有声明过的变量和函数声明提升至作用域的顶部,无论是否在代码的顶部声明。
代码语言:javascript复制console.log(a); // undefined
var a = 10;
console.log(func()); // "Hello world!"
function func() {
return "Hello world!";
}
在上面的例子中,变量a和函数func都被提升到了作用域的顶部。这意味着即使在代码的顶部没有声明变量或函数,它们也可以在代码的后面使用。
在实际开发中,建议在代码的顶部声明所有变量和函数,以提高代码的可读性和可维护性。同时,在使用变量或函数时,也要注意它们是否已经声明过,避免因变量提升而导致的意想不到的错误。
前端中的var和let哪个执行效率更高呢?
在执行效率方面,let比var更高效。因为let是块级作用域,在代码块执行完毕后会自动释放内存,而var则是函数作用域,不会自动释放内存,因此会占用更多的内存。同时,let也可以实现更严格的变量声明和限制,可以避免一些潜在的问题。所以建议尽量使用let,较少使用var。