类是构造函数的语法糖,基于原型继承;2. 两者功能等价,类提供更清晰安全的语法;3. 类必须用new调用、无提升、默认严格模式;4. 类通过extends和super简化继承。
JavaScript中的类(Class)和构造函数本质上是同一机制的不同表现形式,它们都用于创建对象实例,但语法和使用方式有所差异。
类是构造函数的语法糖
ES6引入的class关键字并不是全新的继承模型,而是基于原有原型继承的语法封装。定义一个类在底层仍然会生成一个构造函数。
例如:
构造函数写法:
立即学习“Java免费学习笔记(深入)”;
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log(“Hello, ” + this.name);
};
类写法:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(“Hello, ” + this.name);
}
}
这两种写法在功能上几乎完全等价。类中的constructor对应构造函数主体,类中的方法会被挂载到原型上。
语法上的主要区别
虽然底层机制一致,但类提供了更清晰、更安全的语法结构:
- 类必须通过new调用,直接执行会报错;而构造函数可以被误当作普通函数调用
- 类声明不会被提升(不存在变量提升),必须先定义再使用
- 类内部默认启用严格模式
- 类的方法之间不需要逗号分隔,语法更接近其他面向对象语言
- 类支持static关键字定义静态方法,语法更直观
继承实现方式对比
类在处理继承时明显优于传统构造函数。
构造函数实现继承较复杂:
function Student(name, grade) {
Person.call(this, name);
this.grade = grade;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
类实现继承简洁明了:
class Student extends Person {
constructor(name, grade) {
super(name);
this.grade = grade;
}
}
类通过extends和super关键字简化了原型链操作和父类调用。
基本上就这些。类让JavaScript的面向对象编程更规范、易读,但理解其背后的构造函数和原型机制依然重要。
以上就是JavaScript中的类(Class)与构造函数有何javascript es6 java 面向对象编程 区别 JavaScript es6 Static Object 面向对象 封装 父类 构造函数 继承 class console function 对象 constructor 变量提升 严格模式 this prototype