JavaScript 中的 class 是构造函数的语法糖,本质基于原型机制,非全新对象模型;它使构造器、原型方法和静态方法定义更清晰,但底层仍等价于函数与原型操作。

JavaScript 中的 class 是构造函数的语法糖,本质仍是基于原型的面向对象机制,不是全新对象模型。它让定义构造器、原型方法和静态方法更清晰直观,但底层运行逻辑和传统构造函数完全一致。
class 的基本定义方式
使用 class 关键字声明类,内部用 constructor() 定义初始化逻辑,其他方法直接写在类体中(自动挂载到原型上):
class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { return `Hello, I'm ${this.name}`; } static createAnonymous() { return new Person('Anonymous', 0); }}
注意:constructor 是可选的,省略时会默认添加空构造函数;类内部方法默认不可枚举;类声明不会被提升(必须先声明后使用)。
与传统构造函数的核心区别
语法更简洁统一:把构造逻辑、原型方法、静态方法集中在一个块内,避免手动操作 prototype 或重复写 Person.prototype.xxx = function(){} 强制使用 new:类构造器调用时若不加 new,会直接报错(TypeError);而普通构造函数不加 new 可能静默失败或污染全局 严格模式默认开启:类内部所有代码自动运行在严格模式下,无需手动声明 "use strict" 没有变量提升:类声明是 let 类似的行为,存在“暂时性死区”,不能在声明前访问
继承写法更直观(extends + super)
相比构造函数手动设置原型链(Student.prototype = Object.create(Person.prototype)),class 用 extends 和 super() 明确表达继承关系:
立即学习“Java免费学习笔记(深入)”;
class Student extends Person { constructor(name, age, grade) { super(name, age); // 调用父类 constructor this.grade = grade; } study() { return `${this.name} is studying`; }}
子类中必须在使用 this 前调用 super(),否则报错;这也强制了继承链的初始化顺序。
class 不是“真正的类”,只是语法包装
编译后的结果(如 Babel)或浏览器底层执行时,class 仍会被转为基于函数和原型的操作。例如:
class A {} 实际等价于 function A() {} A.prototype.method = function(){} 依然在幕后发生 instanceof、原型链查找、Object.getPrototypeOf() 等行为与构造函数完全一致
所以 class 并没有改变 JavaScript 的原型本质,只是让开发者更容易写出结构清晰、符合直觉的面向对象代码。
基本上就这些。用 class 写更安全、更易读,但理解它背后的构造函数和原型机制,才能真正掌握 JavaScript 的对象模型。
以上就是JavaScript class如何定义_它和构造函数有何区别?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1542659.html
微信扫一扫
支付宝扫一扫