ES6之类的其他书写方式

ES6之类的其他书写方式

js 复制代码
const methodName="sayHello";
class Person{
    constructor(name, age, sex){
        this.name = name;
        //this.getAge();
        //this.setAge();
        this.age = age;
        this.sex = sex;
    }
    get age(){
        return this._age;
    }
    set age(age){
        if(typeof age !== "number"){
            throw new TypeError("age property must be a number");
        }else if(age < 0){
            age = 0;
        }else if(age > 1000){
            age = 1000;
        }
        this._age = age;
    }
    [methodName](){
        console.log(this.name,this.age,this.sex)
    }
}
const p1 = new Person("张三", 18, "男");
p1[methodName]()

这里是类的一些其他特点。

类的可计算成员名,和对象初始化的可计算属性类似,可以将成员名变成[]+表达式的形式。

getter和setter,在之前时期,我们可以使用函数的方式来进行 age 的读取和赋值的过程。但这种方式与属性的书写方式不一致,需要使用 p1.getAge() ,p1.setAge() 的方式。采用 getter 和 setter 可以直接写成属性的形式,p1.age , p1.age=10 。也可使用 Object.defineProperty 的方式书写。

静态成员是定义在构造函数的属性。无法通过实例对象访问。例如:

js 复制代码
class Chess{
    constructor(name){
        this.name = name;
    }
    static width = 100;
    static height = 100;
    static show(){
        console.log(this.name)
    }
}
console.log(Chess.width, Chess.height)
Chess.show()

使用 static 关键字可以定义静态属性,可以通过 console.dir() 查看。

字段初始化器

js 复制代码
class Test {
    a=1;
    b=2;
    print=()=> {
        console.log(this)
    }
}
// function Test() {
// }
// Test.prototype.print=function(){
//     console.log(this)
// }
const t1 = new Test();
const t2 = t1.print;
t2()

字段初始化器是指可以直接给成员赋值,这些成员会添加到构造器里。也可以赋值给一个方法,不过方法里的this指向存在问题。this会指向window,这时使用箭头函数可以使this永远绑定到对象上,虽然会造成一定的内存浪费。

类表达式,可以将类用在参数或返回值中。

js 复制代码
const test=class{
    print(){
        console.log(this)
    }
}
new test().print()
相关推荐
Hilaku34 分钟前
我用 Gemini 3 Pro 手搓了一个并发邮件群发神器(附源码)
前端·javascript·github
全栈前端老曹1 小时前
【包管理】npm init 项目名后底层发生了什么的完整逻辑
前端·javascript·npm·node.js·json·包管理·底层原理
HHHHHY1 小时前
mathjs简单实现一个数学计算公式及校验组件
前端·javascript·vue.js
iReachers1 小时前
HTML打包APK(安卓APP)中下载功能常见问题和详细介绍
前端·javascript·html·html打包apk·网页打包app·下载功能
愈努力俞幸运1 小时前
vue3 demo教程(Vue Devtools)
前端·javascript·vue.js
持续前行1 小时前
在 Vue3 中使用 LogicFlow 更新节点名称
前端·javascript·vue.js
Anita_Sun1 小时前
Underscore.js 整体设计思路与架构分析
前端·javascript
Java陈序员1 小时前
告别手写礼簿!一款开源免费的电子红白喜事礼簿系统!
javascript·css·html
赵明飞1 小时前
深入解析LoRaWAN协议架构与核心组件:为什么NS服务器如此关键?
javascript
咖啡の猫1 小时前
TypeScript-Babel
前端·javascript·typescript