ES6新特性:class详解与对比ES5

0 下载量 191 浏览量 更新于2024-09-01 收藏 78KB PDF 举报
"ES6新特性中的`class`基本用法解析" 在JavaScript中,ES6引入了`class`关键字,这是对传统JavaScript面向对象编程的一个重大改进,使其更接近于像Java和C++这样的静态类型语言。以下是关于`class`的一些关键知识点: 1. **关键字class**:`class`关键字用于定义类,它提供了一种更简洁、易读的语法,用来创建对象的模板。相比于ES5中的构造函数和原型链,`class`提供了更直观的面向对象编程体验。 2. **默认constructor**:每个`class`都有一个默认的`constructor`方法,用于创建和初始化新实例。如果不自定义,会有一个空的构造函数。如果需要自定义,可以通过`constructor`来指定实例的初始化行为,并使用`this`关键字引用实例。 3. **方法的定义**:类的所有方法都被定义在`prototype`属性上,但它们是不可枚举的。值得注意的是,方法定义后不以分号结尾,这是与函数定义的一个重要区别。 4. **严格模式**:类的内部默认使用严格模式(`use strict`),这意味着在类的定义中不能有意外的全局变量或未声明的变量。 5. **不存在变量提升**:与ES5不同,`class`中的变量和方法不会被提升到类的顶部,必须在定义后才能使用,遵循词法作用域。 6. **this的指向**:在`class`中,`this`总是指向当前类的实例,这消除了在构造函数中处理`this`的一些复杂性。 7. **静态方法**:通过`static`关键字,可以在类上定义静态方法,这些方法不依赖于实例,而是直接通过类来调用。 8. **实例属性和静态属性**:实例属性可以直接在类体内用等号赋值,或者在`constructor`中定义。静态属性则是在实例属性前面加上`static`关键字。 9. **继承**:使用`extends`关键字实现类的继承。与ES5的基于原型链的继承不同,ES6的继承是基于类的,子类必须在`constructor`中调用`super()`来初始化父类的属性和方法。 10. **继承原生构造函数**:ES6的类可以继承原生的JavaScript构造函数,如`Array`或`Error`,这是ES5中难以实现的。 对比ES5和ES6的写法,可以明显看出`class`语法的简洁性和可读性。例如: ```javascript // ES5 写法 function Person(name) { this.name = name; } Person.prototype.getName = function() { console.log(this.name); } var person = new Person('Alice'); person.getName(); // ES6 面向对象的写法 class Person { constructor(name) { this.name = name; } getName() { console.log(this.name); } } let alice = new Person('Alice'); alice.getName(); ``` 以上就是关于ES6中`class`基本用法的主要知识点,它们极大地提高了JavaScript在面向对象编程中的表现力和可维护性。