ES6之类:构造函数的语法糖

ES6之类:构造函数的语法糖

类的出现,有效地解决了之前构造函数的问题。这是以前的写法:

js 复制代码
//使用传统构造函数写法
//构造器
function Person(name, age, sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
}
//原型方法
Person.prototype.sayHello=function(){
    console.log(this.name,this.age,this.sex)
}
const p1 = new Person("张三", 18, "男");
console.log(p1)
for (const prop in p1) {
    console.log(prop)
}

可以看到,使用构造函数时js并不会区分它是普通函数还是构造函数。

构造函数通常由构造器和原型方法组成。定义在原型上是为了减少内存资源上的浪费。

有这么几个问题:

  • 属性和原型方法分离,代码阅读性差
  • 枚举属性时会包括原型方法
  • 默认情况下,可以直接使用普通函数的方式调用(可以使用 new.target 避免)

下面是类的写法:

js 复制代码
//使用类的写法
class Person{
    //构造器
    constructor(name, age, sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    //原型方法
    sayHello(){
        console.log(this.name,this.age,this.sex)
    }
}
const p1 = new Person("张三", 18, "男");
console.log(p1)
for (const prop in p1) {
    console.log(prop)
}

使用类时需要使用关键字 class ,使用 constructor 创建构造器,所有的方法会直接加到原型上。所有的成员都统一到了类里。

类的特点:

  • 所有成员统一,可读性好
  • 枚举时不会枚举原型方法
  • 必须使用 new 调用构造器
  • 自动使用严格模式
  • 原型上的方法无法通过 new 调用
  • 类的声明不会被提升,而是放入暂时性死区
相关推荐
多加点辣也没关系1 天前
JavaScript|第4章:类型转换
开发语言·javascript
yqcoder1 天前
httpOnly 是什么,又有什么用?
开发语言·前端·javascript
烬羽1 天前
还在手动拼路径、写回调地狱?一文吃透 Node.js 的 path 和 fs
javascript·程序员·node.js
mONESY1 天前
LangChain JS 高性能并行执行解析、工具调用底层封装
javascript
迅速的自行车1 天前
从一段模板说起
前端·javascript·vue.js
YIAN1 天前
LangChain JS 工具调用实战:基于 DeepSeek-V4-Flash 实现本地文件读取 AI 代码助手(完整可运行源码)
javascript·langchain·前端框架
尼斯湖皮皮怪1 天前
iceCoder 记忆系统深度分析
前端·javascript
爸爸6191 天前
07 ArkTS 基础类型与接口定义:从 TypeScript 到鸿蒙的类型升级
javascript·华为·typescript·harmonyos·鸿蒙系统
默_笙1 天前
🌏 MCP 是 AI 界的 USB-C:一个协议让所有模型都能用上所有工具
前端·javascript
月光刺眼1 天前
用LangChain 打造第一个 Agent:LLM 大脑与 Tool 手脚的完整闭环
javascript·人工智能·全栈