当前位置: 首页 > web >正文

JS当中怎么定义一个类

1. 使用 ES6 类语法(推荐)

这是 ES6 引入的语法糖,让类的定义更加直观清晰。

基本结构

class MyClass {// 构造函数,用于初始化对象constructor(param1, param2) {this.property1 = param1;this.property2 = param2;}// 实例方法instanceMethod() {return `属性值: ${this.property1}`;}// 静态方法,通过类名直接调用static staticMethod() {return '这是静态方法';}// getter 方法,用于获取属性值get computedProperty() {return this.property1 + this.property2;}// setter 方法,用于设置属性值set computedProperty(value) {this.property1 = value / 2;this.property2 = value / 2;}
}// 类的使用
const obj = new MyClass(1, 2);
console.log(obj.instanceMethod()); // 输出: 属性值: 1
console.log(MyClass.staticMethod()); // 输出: 这是静态方法
console.log(obj.computedProperty); // 输出: 3
obj.computedProperty = 10;
console.log(obj.property1); // 输出: 5

继承

class ChildClass extends MyClass {constructor(param1, param2, param3) {super(param1, param2); // 调用父类的构造函数this.property3 = param3;}// 重写父类方法instanceMethod() {return `${super.instanceMethod()} 和 ${this.property3}`;}
}const childObj = new ChildClass(1, 2, 3);
console.log(childObj.instanceMethod()); // 输出: 属性值: 1 和 3

2. 使用构造函数和原型(ES6 之前的方式)

这是 JavaScript 传统的实现类的方式。

基本结构

function MyClass(param1, param2) {this.property1 = param1;this.property2 = param2;// 私有属性和方法(外部无法直接访问)const privateProperty = '私有属性';function privateMethod() {return privateProperty;}// 特权方法(可以访问私有属性和方法)this.privilegedMethod = function() {return privateMethod();};
}// 原型方法(所有实例共享同一个方法)
MyClass.prototype.instanceMethod = function() {return `属性值: ${this.property1}`;
};// 静态方法
MyClass.staticMethod = function() {return '这是静态方法';
};// 类的使用
const obj = new MyClass(1, 2);
console.log(obj.instanceMethod()); // 输出: 属性值: 1
console.log(MyClass.staticMethod()); // 输出: 这是静态方法
console.log(obj.privilegedMethod()); // 输出: 私有属性

继承

function ChildClass(param1, param2, param3) {MyClass.call(this, param1, param2); // 调用父类的构造函数this.property3 = param3;
}// 继承父类的原型方法
ChildClass.prototype = Object.create(MyClass.prototype);
ChildClass.prototype.constructor = ChildClass;// 重写父类方法
ChildClass.prototype.instanceMethod = function() {return `${MyClass.prototype.instanceMethod.call(this)} 和 ${this.property3}`;
};const childObj = new ChildClass(1, 2, 3);
console.log(childObj.instanceMethod()); // 输出: 属性值: 1 和 3

两种方式的区别

特性ES6 类语法构造函数和原型
语法简洁、直观复杂、容易混淆
继承简单,使用 extends复杂,需要手动设置原型
静态方法内置支持需要手动添加到构造函数
私有属性需要特殊处理(# 语法)通过闭包实现

其他注意事项

  1. 箭头函数:不适合用于定义类方法,因为它没有自己的 this,会继承外层的 this
  2. 私有属性和方法:在 ES6 类中,可以使用 # 前缀定义私有属性和方法(如 #privateProperty)。
  3. 类表达式:类也可以用表达式的方式定义(如 const MyClass = class {})。




    // 在JS当中怎么定义一个类。function User(a, b){// 属性this.usercode = a;this.username = b;// 方法(实例方法,通过对象调用的。)this.doSome = function(){console.log(this.username + " doSome....")}// 静态方法(直接用类名调用)User.doOther = function(){console.log("user doOther....")}}/*User = function(usercode, username){// 属性this.usercode = usercode;this.username = username;// 方法(实例方法,通过对象调用的。)this.doSome = function(){console.log(username + " doSome....")}// 静态方法(直接用类名调用)User.doOther = function(){console.log("user doOther....")}}*/

http://www.xdnf.cn/news/14473.html

相关文章:

  • 【Quest开发】初始项目环境配置
  • Hive集成Paimon
  • 华为云国际版有区块链吗
  • Windows 系统中扩大 WSL2 的内存限制
  • YSYX学习记录(九)
  • 2026 AAAI 投稿要求
  • vscode-monitor-pro | 提升开发效率的利器
  • 【递归】两两交换链表中的节点(medium)
  • Oracle03-PL/SQL Developer
  • 深入解析Jersey框架及其与Spring MVC的核心差异
  • linux多线程之互斥锁
  • 影视剧学经典系列-梁祝-《吕氏春秋·应同》
  • 零基础学前端-传统前端开发(第四期-JS基础-语法,语句)
  • Git+Jenkins-Docker搭建企业级CI/CD平台
  • 电阻篇---上拉电阻的取值
  • Java 中的 JSON 转换
  • 《深度剖析:SCSS中混入(Mixin)为浏览器前缀赋能》
  • LeetCode 第78题:子集
  • android CALL 之 RIL、TELEDCOM、PHONE
  • 详细讲解BUUCTF-ciscn_2019_n_1
  • 6.11小测(html、css)
  • 【数据结构中哈希函数与哈希表】
  • 中国风系列简约淡雅通用PPT模版分享
  • 【Linux手册】进程的状态:从创建到消亡的“生命百态”
  • K8s集群平台
  • MySQL事务:从原理到实践
  • Elasticsearch9 + 通义大模型实现语义检索操作详解
  • LoRA核心公式
  • 语言模型是怎么工作的?通俗版原理解读!
  • 2.1 Windows VS2019编译FFmpeg 4.4.1