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

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.dtcms.com/a/251533.html

相关文章:

  • Linux信号机制:进程异步通信的秘密
  • Kafka 可靠性保障:消息确认与事务机制(一)
  • XR-RokidAR-UXR3.0-Draggable 脚本解析
  • HTML的最基础入门知识,从零开始逐步讲解,适合为后续爬虫技术打基础:
  • 苏州SAP代理商:哲讯科技助力企业数字化转型
  • [python] 堆
  • 贝塞尔曲线的公式推导贝塞尔曲线的公式推导,和 SVG 中 Path 的贝塞尔曲线指令的理解记忆
  • 体验AI智能投资!AI Hedge Fund了解一下
  • Langflow 构建多代理和 RAG 应用的可视化框架
  • STM32103CBT6显示ST7789通过SPI方式显示柬埔寨文
  • 【Dify系列】【Dify 核心功能】【应用类型】【二】【文本生成】
  • 解决虚拟环境中文绘图显示问题
  • RFC4291-IPv6地址架构
  • 计算机求职提前批/求职什么时候投递合适
  • 从0开始学习R语言--Day24--稀疏建模
  • TopNet:基于Transformer的高效点云几何压缩网络模型详解
  • 基于C#部署YoloV5目标检测模型
  • 【系统分析师】2010年真题:综合知识-答案及详解
  • 6月15日星期日早报简报微语报早读
  • Babylon引擎(三)
  • 基于Ultralytics的RT-DETR改进思考
  • BEV 感知算法评价指标简介
  • Appium框架下载时卡主的解决办法(ERR_TLS_CERT_ALTNAME_INVALID)
  • 基于根茎式思维深化后的提示词设计案例
  • 【精选】计算机毕业设计基于SpringBoot高校社团管理系统 社团信息维护 活动发布报名 成员审核与公告发布平台源码+论文+PPT+讲解
  • 智能土木通 - 土木工程专业知识问答系统01:项目简介
  • 4.es、kibana容器的下载安装
  • C#最佳实践:为何应减少方法参数
  • 【python】 args和kwargs区别
  • 【git】有两个远程仓库时的推送、覆盖、合并问题