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

前端知识点---构造函数(javascript)

文章目录

  • 前端知识点---构造函数(Javascript)
  • 1. 定义构造函数
  • 2. 使用构造函数创建对象
  • 3. 工作原理
  • 4. 构造函数与原型
  • 5. 类的语法糖
  • 6. 注意事项

前端知识点—构造函数(Javascript)

在我的文章 “对象” 里我提到了构造函数 , 前端知识点—Javascript的对象(Javascript)
因为day14讲到了"函数" , 所以另起一篇文章. 来讲构造函数 , 这个是属于比较重要的部分

构造函数是一种用于创建和初始化对象的特殊函数。一般与new关键字一起使用,来创建具有相同结构和行为的多个对象。是属于复杂数据类型 , 前面的string , number这些属于简单数据类型 , 注意把基础知识捋顺 , 面试会考的 .

1. 定义构造函数

1 构造函数作用是初始化对象。定义对象的方法。
2 构造函数的名字通常以大写字母开头,以便与普通函数区分。普通函数是小驼峰命名法 .
3 默认返回新创建的对象(除非显式返回另一个对象)

function Person(name, age) {this.name = name;  // 为实例添加属性this.age = age;this.sayHello = function() {console.log(`My name is ${this.name} , I'm ${this.age} years old now'.`);};
}

里面的this是什么东西呢? 看我另一篇文章 , 我把成块的知识点写成专栏方便你们查看前端知识点—this几种用法

2. 使用构造函数创建对象

要使用构造函数创建对象,需要使用new关键字:

const person1 = new Person("Alice", 25);
const person2 = new Person("Bob", 30);person1.sayHello();  // 输出: Hello, my name is Alice.
person2.sayHello();  // 输出: Hello, my name is Bob.

例子

function Person(name, age) {this.name = name; // 为新对象添加 name 属性this.age = age;   // 为新对象添加 age 属性this.greet = function() { // 定义一个方法console.log(`Hi, my name is ${this.name} and I'm ${this.age} years old.`);};
}// 使用构造函数创建对象
const person1 = new Person('Alice', 25);
const person2 = new Person('Bob', 30);person1.greet(); // Hi, my name is Alice and I'm 25 years old.
person2.greet(); // Hi, my name is Bob and I'm 30 years old.

3. 工作原理

创建新对象:new关键字创建一个空对象。
绑定this:新对象的上下文被绑定到构造函数中的this。
设置原型:新对象的原型被设置为构造函数的prototype属性。
返回对象:构造函数返回这个新对象(如果没有显式返回其他对象)。

4. 构造函数与原型

为了节省内存,可以将方法添加到构造函数的prototype上,而不是每次创建对象时都重新定义方法。

function Person(name, age) {this.name = name;this.age = age;
}Person.prototype.sayHello = function() {console.log(`Hello, my name is ${this.name}.`);
};const person1 = new Person("Alice", 25);
const person2 = new Person("Bob", 30);console.log(person1.sayHello === person2.sayHello); // true

5. 类的语法糖

从ES6开始,JavaScript引入了class语法,它本质上是对构造函数和原型的封装,提供了更清晰的语法。

class Person {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}.`);}
}const person1 = new Person("Alice", 25);
person1.sayHello();  // 输出: Hello, my name is Alice.

6. 注意事项

如果构造函数中显式返回一个对象,new将返回该对象,而不是this。
如果返回的是一个非对象值,new仍会返回this。

function Person(name) {this.name = name;return { greeting: "Hi" };  // 返回这个对象
}const person = new Person("Alice");
console.log(person);  // 输出: { greeting: "Hi" }

总结
构造函数是JavaScript中创建和初始化对象的一种重要方式。随着ES6的引入,class语法让创建对象和定义方法变得更加直观,但构造函数的底层原理仍然是JavaScript对象创建的核心。

相关文章:

前端知识点---构造函数(javascript)

文章目录 前端知识点---构造函数(Javascript)1. 定义构造函数2. 使用构造函数创建对象3. 工作原理4. 构造函数与原型5. 类的语法糖6. 注意事项 前端知识点—构造函数(Javascript) 在我的文章 “对象” 里我提到了构造函数 , 前端知识点—Javascript的对象(Javascript) 因为day…...

Nginx 上安装 SSL 证书并启用 HTTPS 访问

本文将介绍如何在 Nginx 上为你的域名安装 SSL 证书,并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书,通过 Certbot 生成并管理证书,然后配置 Nginx 实现 HTTPS 加密访问。同时,我们将解决因 SSL 证…...

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...

docker运行ActiveMQ-Artemis

前言 artemis跟以前的ActiveMQ不是一个产品,原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的,和原来不兼容,全称:ActiveMQ Artemis 本位仅介绍单机简单部署使用,仅用于学习和本地测试使用 官网:…...

90.选择排序(理论分析)

一.选择排序 冒泡排序每相邻的俩个元素之间都会比较交换一次,效率比较慢。这对这个问题所改进的算法叫做选择排序。 二.选择排序的实现思路 首先在一组未排序的数据中假定一个最大或者最小元素,一般是第0个元素。然后在从剩余未排序的元素中…...

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知,GitLab 的升级必须要严格遵循升级路径,否则就会出现问题,导致升级失败。因此,在 GitLab 升级之前需要做好两件事情: 当前版本的确认升级路径的确认 极狐GitLa…...

【Fermat】费马小定理

定理 若存在整数 a , p 且g c d ( a , p ) 1 gcd(a,p)1gcd(a,p)1,即二者互为质数,则有 a ( p − 1 ) ≡ 1 ( m o d p ) a^{(p-1)}≡ 1(mod p) a (p−1) ≡1(modp) 目录 定理 引理 引理一 引理二 证…...

NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议

目录 NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议 一、NVMe的定义 二、NVMe的特点 三、NVMe的应用场景 四、举例说明 NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议 是一种非易失性存储器访问和传输协议,专为固态硬盘(SSD)…...

C++初阶——queue

一、什么是queue 是一个容器适配器,专门设计用于在先进先出(FIFO,First In First Out)的上下文中操作。它是一个容器适配器,这意味着它不是一个完整的容器类,而是封装了一个特定的容器类(如list…...

达梦数据库迁移j脚本

国产环境使用达梦数据库的越来越多&#xff0c;除了使用管理工具&#xff0c;还是可以使用脚本。 下面简单记录下&#xff0c;我在迁移中遇到的问题&#xff1a; 备份脚本 使用此脚本可以一次备份一个数据 backup_one_db.sh #!/bin/bashexport DB$1 export PASS<your_p…...

【Linux】内核调用栈打印函数dump_stack使用效果

init/main.c的start_kernel示例&#xff0c;这个调用栈不太深&#xff1a; /var/log/dmesg日志&#xff1a; [ 0.000000] kernel: [init/main.c start_kernel 911] start_kernel(void) [ 0.000000] kernel: [kernel/panic.c print_tainted 519 LOG_TIMES: 1 ] [ 0.…...

Uniapp踩坑input自动获取焦点ref动态获取实例不可用

前言 大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识。很久很更新了&#xff0c;这几个月一直在加班&#xff0c;今天记录一个uniapp关于input中focus()方法自动获取焦点的坑。 案例 为了实现一个手机验证码的页面&#xff0c;验证码是五个输入框&#xf…...

数据分析-47-时间序列变点检测之离线历史数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 离线数据变点检测3.1 Ruptures模块3.2 恒定方差CPD3.3 变化方差CPD4…...

加入GitHub Spark需要申请

目录 加入GitHub Spark需要申请 GitHub Spark 一、产品定位与特点 二、核心组件与功能 三、支持的AI模型 四、应用场景与示例 五、未来展望 六、申请体验 加入GitHub Spark需要申请 GitHub Spark 是微软旗下GitHub在2024年10月30日的GitHub Universe大会上推出的一款革…...

生成式GPT商品推荐:精准满足用户需求

生成式GPT商品推荐&#xff1a;精准满足用户需求 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;电商平台正在逐步迎来一场前所未有的变革。尤其是生成式GPT&#xff08;Generative Pre-trained Transformer&#xff09;技术的应用&#xff0c;正在重新定…...

async 和 await的使用

一、需求 点击按钮处理重复提交&#xff0c;想要通过disabled的方式实现。 但是点击按钮调用的方法里有ajax、跳转、弹窗等一系列逻辑操作&#xff0c;需要等方法里流程都走完&#xff0c;再把disabled设为false&#xff0c;这样下次点击按钮时就可以继续走方法里的ajax等操作…...

Spring Cloud Vault快速入门Demo

1.什么是Spring Cloud Vault&#xff1f; Spring Cloud Vault 是 Spring Cloud 生态系统中的一个项目&#xff0c;旨在简化 Spring 应用程序与 HashiCorp Vault 的集成。它提供了一种方便的方式来管理和访问应用程序的敏感配置数据&#xff0c;如数据库凭证、API 密钥和其他机…...

道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会

11月12日&#xff0c;2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办&#xff0c;电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合&#xff0c;满足高…...

GitHub Org

运营一个GitHub Org&#xff08;组织&#xff09;是一个复杂但充满价值的过程&#xff0c;它涉及多个方面&#xff0c;包括项目管理、团队协作、代码审查、文档维护、社区建设等。以下是一篇关于如何运营GitHub Org的详细指南&#xff0c;旨在帮助组织者更好地管理和维护其GitH…...

unity小:shaderGraph不规则涟漪、波纹效果

实现概述 在本项目中&#xff0c;我们通过结合 Sine、Polar Coordinates 和 Time 节点&#xff0c;实现了动态波纹效果。以下是实现细节&#xff1a; 核心实现 Sine 波形生成&#xff1a; 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化&#xff0c;为波纹效果提供…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...