JavaScript -- ES6中类的等价写法

本文深入探讨了ES6中类与自定义类型的六个重要区别,包括类声明的行为、严格模式的自动应用、方法的不可枚举性、方法内部的[[Construct]]缺失、构造器的调用要求及类名的重写限制。并通过对比两种类型的实现方式,展示了ES6类语法的简洁性和易用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尽管类与自定义类型之间有相似性,但仍然要记住一些重要的区别:

1. 类声明不会被提升,这与函数定义不同。类声明的行为与 let 相似,因此在程序的执行
到达声明处之前,类会存在于暂时性死区内。
2. 类声明中的所有代码会自动运行在严格模式下,并且也无法退出严格模式。

3. 类的所有方法都是不可枚举的,这是对于自定义类型的显著变化,后者必须用
Object.defineProperty() 才能将方法改变为不可枚举。
4. 类的所有方法内部都没有 [[Construct]] ,因此使用 new 来调用它们会抛出错误。
5. 调用类构造器时不使用 new ,会抛出错误。
6. 试图在类的方法内部重写类名,会抛出错误。

我们来看一个简单的类。

class Person {
    constructor(name) {
        this.name = name;
    }
    sayName () {
        return this.name;
    }
}

那么根据以上规则,我不得不该写成为

let Person = (function () {//let 
    "use strict";//严格模式
    const Person = function (name) { //类的方法不得重写类名
        if (typeof new.target === "undefined") { //必须以new 调用
            throw new Error("You should use new to call this function");
        } else {
            this.name = name;
        }
    }

    Object.defineProperty(Person.prototype, "sayName", {
        value: function () {
            if (typeof new.target !== "undefined") { //不得以new 调用
                throw new Error("You shouldn't use new to call this function!");
            }
            return this.name
        },
        enumerable: false, //不可枚举
        writable: true,
        configurable: true
    })
    return Person;
})();

所以用es6的语法非常简单。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值