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

JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别?

JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别?

JavaScript 创建对象的方式

在 JavaScript 中,有多种方式可以创建对象,这里主要介绍对象字面量和构造函数这两种常见的方式。

1. 对象字面量

对象字面量就像是你直接“画”出一个对象。你可以用一对花括号 {} 来创建一个对象,在花括号里面可以直接定义对象的属性和方法。这种方式非常直观,就像你直接告诉别人这个对象有什么“东西”(属性和方法)。

代码示例

// 使用对象字面量创建一个人对象
let person = {// 定义属性name: '张三',age: 25,// 定义方法sayHello: function() {console.log('你好,我是'+ this.name + ',今年'+ this.age + '岁。');}
};// 调用对象的方法
person.sayHello(); 

在这个例子中,我们用对象字面量创建了一个 person 对象,它有 nameage 属性,还有一个 sayHello 方法。

2. 构造函数

构造函数就像是一个“对象工厂”。你先定义一个函数,这个函数就像是一个模板,然后通过 new 关键字来使用这个模板创建多个对象。每个用这个模板创建的对象都有相同的结构,但属性值可以不同。

代码示例

// 定义一个构造函数
function Person(name, age) {// 定义属性this.name = name;this.age = age;// 定义方法this.sayHello = function() {console.log('你好,我是'+ this.name + ',今年'+ this.age + '岁。');};
}// 使用构造函数创建对象
let person1 = new Person('张三', 25);
let person2 = new Person('李四', 30);// 调用对象的方法
person1.sayHello(); 
person2.sayHello(); 

在这个例子中,Person 就是一个构造函数,我们用它创建了 person1person2 两个对象,它们都有 nameage 属性和 sayHello 方法,但具体的属性值不同。

对象字面量和构造函数创建对象的区别

1. 创建方式的直观性
  • 对象字面量:非常直观,就像直接在纸上写出对象的样子,一眼就能看出对象有哪些属性和方法。适合创建单个、简单的对象。
  • 构造函数:需要先定义一个函数作为模板,然后再用 new 关键字创建对象。相对来说没那么直观,但适合创建多个具有相同结构的对象。
2. 代码复用性
  • 对象字面量:如果要创建多个结构相同的对象,每个对象都需要重新写一遍属性和方法的定义,代码复用性低。
// 创建两个结构相同的对象,需要重复写属性和方法
let personA = {name: '张三',age: 25,sayHello: function() {console.log('你好,我是'+ this.name + ',今年'+ this.age + '岁。');}
};let personB = {name: '李四',age: 30,sayHello: function() {console.log('你好,我是'+ this.name + ',今年'+ this.age + '岁。');}
};
  • 构造函数:可以通过一个构造函数创建多个对象,只需要定义一次属性和方法,代码复用性高。
function Person(name, age) {this.name = name;this.age = age;this.sayHello = function() {console.log('你好,我是'+ this.name + ',今年'+ this.age + '岁。');};
}let person1 = new Person('张三', 25);
let person2 = new Person('李四', 30);
3. 原型和继承方面
  • 对象字面量:每个对象字面量创建的对象都有自己独立的属性和方法,没有明显的原型和继承关系。
let obj1 = { key: 'value1' };
let obj2 = { key: 'value2' };
// obj1 和 obj2 之间没有继承关系
  • 构造函数:通过构造函数创建的对象会继承构造函数原型上的属性和方法。可以利用原型链实现对象间的继承,提高代码的可扩展性。
function Person(name) {this.name = name;
}// 给 Person 的原型添加方法
Person.prototype.sayHello = function() {console.log('你好,我是'+ this.name);
};let person = new Person('张三');
// person 对象继承了 Person 原型上的 sayHello 方法
person.sayHello(); 

那么构造函数创建对象时,this的指向是如何确定的?

在 JavaScript 里,使用构造函数创建对象时,this 的指向有着特定的规则,下面详细解释并通过代码示例说明。

基本原理

当使用 new 关键字调用构造函数创建对象时,this 指向新创建的对象。可以把构造函数想象成一个“对象加工厂”,new 关键字就是启动这个加工厂的按钮,当按下按钮后,加工厂会生产出一个新的对象,而 this 就像是这个新对象的“代言人”,在构造函数里对 this 进行操作,其实就是在对新创建的对象进行操作。

代码示例

// 定义一个构造函数 Person
function Person(name, age) {// 这里的 this 指向新创建的对象this.name = name;this.age = age;this.sayHello = function() {console.log(`你好,我是 ${this.name},今年 ${this.age} 岁。`);};
}// 使用 new 关键字调用构造函数创建对象
let person1 = new Person('张三', 25);
let person2 = new Person('李四', 30);// 调用对象的方法
person1.sayHello(); 
person2.sayHello(); 

在上面的代码中:

  1. 当执行 let person1 = new Person('张三', 25); 时,new 关键字做了以下几件事:
    • 创建一个新对象。
    • this 指向这个新对象。
    • 执行构造函数 Person 里的代码,也就是把 nameage 属性添加到新对象上,同时添加 sayHello 方法。
    • 如果构造函数没有显式返回一个对象,那么就返回 this 所指向的新对象。所以最终 person1 就是这个新创建的对象。
  2. 同理,let person2 = new Person('李四', 30); 也创建了一个新对象,this 指向这个新对象,并且给这个新对象添加了相应的属性和方法。

特殊情况

如果构造函数显式返回了一个对象,那么 new 表达式的结果就是这个返回的对象,而不是 this 所指向的对象。但如果返回的不是一个对象(比如返回基本数据类型),那么还是会返回 this 所指向的对象。

显式返回对象的情况
function Car() {this.brand = '丰田';// 显式返回一个对象return {brand: '宝马'};
}let myCar = new Car();
console.log(myCar.brand); // 输出: 宝马

在这个例子中,构造函数 Car 显式返回了一个对象 { brand: '宝马' },所以 myCar 就是这个返回的对象,而不是 this 所指向的原本要创建的对象。

显式返回基本数据类型的情况
function Dog() {this.name = '旺财';// 显式返回一个基本数据类型return 123;
}let myDog = new Dog();
console.log(myDog.name); // 输出: 旺财

这里构造函数 Dog 显式返回了一个基本数据类型 123,但 new Dog() 还是返回了 this 所指向的对象,所以 myDog 就是原本要创建的对象,包含 name 属性。

JavaScript中this的概念和作用
在 JavaScript 里,this 是一个非常重要且有些复杂的概念,它就像一个灵活的“指针”,在不同的场景下会指向不同的对象。下面详细解释 this 的概念、作用以及在不同场景下的指向。

概念

this 是 JavaScript 中的一个关键字,它是一个特殊的对象引用,在代码运行时会根据函数的调用方式动态地指向不同的对象。简单来说,this 就像是一个“替身”,代表着当前执行代码所处的上下文对象。

作用

this 的主要作用是让函数可以灵活地访问和操作不同的对象,提高代码的复用性和灵活性。通过 this,函数可以根据调用它的对象来动态地获取和修改对象的属性和方法。

不同场景下 this 的指向

1. 全局作用域中

在全局作用域中,this 指向全局对象。在浏览器环境中,全局对象是 window 对象;在 Node.js 环境中,全局对象是 global 对象。

// 在浏览器环境中
console.log(this === window); // 输出: true// 定义一个全局变量
var globalVar = '我是全局变量';
// 可以通过 this 访问全局变量
console.log(this.globalVar); // 输出: 我是全局变量
2. 函数内部
  • 普通函数调用:当函数作为普通函数调用时,this 指向全局对象(在严格模式下,thisundefined)。
function test() {console.log(this);
}test(); 
// 在浏览器环境中,输出: Window 对象

在严格模式下:

'use strict';
function test() {console.log(this);
}test(); 
// 输出: undefined
  • 方法调用:当函数作为对象的方法调用时,this 指向调用该方法的对象。
const person = {name: '张三',sayHello: function() {console.log('你好,我是'+ this.name);}
};person.sayHello(); 
// 输出: 你好,我是 张三

这里 sayHello 方法是作为 person 对象的方法调用的,所以 this 指向 person 对象。

3. 构造函数中

当使用 new 关键字调用构造函数创建对象时,this 指向新创建的对象。

function Person(name) {this.name = name;this.sayHello = function() {console.log('你好,我是'+ this.name);};
}const person1 = new Person('李四');
person1.sayHello(); 
// 输出: 你好,我是 李四

Person 构造函数中,this 指向新创建的 person1 对象。

4. 箭头函数中

箭头函数没有自己的 this,它的 this 继承自外层函数(定义时的上下文)。

const obj = {name: '王五',sayHello: function() {const arrowFunc = () => {console.log('你好,我是'+ this.name);};arrowFunc();}
};obj.sayHello(); 
// 输出: 你好,我是 王五

在这个例子中,箭头函数 arrowFunc 中的 this 继承自外层的 sayHello 函数,而 sayHello 函数作为 obj 对象的方法调用,所以 this 指向 obj 对象。

5. callapplybind 方法中
  • callapplybind 是函数的三个方法,它们可以用来显式地指定函数内部 this 的指向。
  • callapply 方法会立即调用函数,并指定 this 的值。区别在于 call 方法接收参数列表,而 apply 方法接收一个数组作为参数。
function greet(message) {console.log(message + ',我是'+ this.name);
}const personA = { name: '赵六' };
const personB = { name: '孙七' };// 使用 call 方法
greet.call(personA, '你好'); 
// 输出: 你好,我是 赵六// 使用 apply 方法
greet.apply(personB, ['哈喽']); 
// 输出: 哈喽,我是 孙七
  • bind 方法会创建一个新的函数,在调用时 this 值会被绑定到指定的对象上,但不会立即调用函数。
function greet(message) {console.log(message + ',我是'+ this.name);
}const personC = { name: '周八' };
const boundGreet = greet.bind(personC);
boundGreet('嗨'); 
// 输出: 嗨,我是 周八

综上所述,this 的指向取决于函数的调用方式,理解不同场景下 this 的指向是掌握 JavaScript 的关键之一。

相关文章:

JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别?

JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别? JavaScript 创建对象的方式 在 JavaScript 中,有多种方式可以创建对象,这里主要介绍对象字面量和构造函数这两种常见的方式。 1. 对象字面量 对象字面量…...

【量化科普】Sharpe Ratio,夏普比率

【量化科普】Sharpe Ratio,夏普比率 🚀🚀🚀量化软件开通🚀🚀🚀 🚀🚀🚀量化实战教程🚀🚀🚀 在量化投资领域,…...

知识蒸馏知识点

1基于kl散度计算,学生模型需要用log_softmax处理 2 为了避免温度对梯度的影响,loss*T**2 操作目的教师 / 学生输出除以 软化概率分布,暴露类别间关系损失乘以 抵消温度对梯度的缩放,维持梯度量级稳定,确保训练收敛性 import torch import torch.nn.functional as F# 原…...

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本: 2. springboot项目搭建 可以集成在自己的项目里,也可以到 spring.io 生成一个项目 生成的话,如下…...

【MySQL】MySQL表的增删改查(进阶)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...

装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住

文章目录 引言I 毛坯房装修的全流程**1. 装修前准备****1.1 确定装修预算****1.2 选择装修方式****1.3 选择装修公司****1.4 办理装修手续****2. 设计阶段****2.1 量房****2.2 设计方案****2.3 确认方案****3. 施工阶段****3.1 主体拆改****3.2 水电改造****3.3 防水工程****3.…...

JavaScript系列(79)--Web Worker 高级应用

Web Worker 高级应用 🔄 Web Worker 为JavaScript提供了真正的多线程能力,让我们能够在后台线程中执行复杂的计算而不阻塞主线程。今天让我们深入探讨Web Worker的高级应用。 Web Worker 概述 🌟 💡 小知识:Web Work…...

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用,旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率,还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系,包括感…...

该如何搭建高效的跨境网络专线?

在如今这个全球化的商业环境中,跨境网络专线成为了企业与个人实现高效、安全跨国通信的重要工具。大家好,在接下来的内容中,我将深入为您探讨跨境网络专线的概念、特点以及搭建流程,帮助您更好地理解和利用这一技术。 一、什么是…...

网络运维学习笔记 017HCIA-Datacom综合实验01

文章目录 综合实验1实验需求总部特性 分支8分支9 配置一、 基本配置(IP二层VLAN链路聚合)ACC_SWSW-S1SW-S2SW-Ser1SW-CoreSW8SW9DHCPISPGW 二、 单臂路由GW 三、 vlanifSW8SW9 四、 OSPFSW8SW9GW 五、 DHCPDHCPGW 六、 NAT缺省路由GW 七、 HTTPGW 综合实…...

Redis数据结构-String字符串

1.String字符串 字符串类型是Redis中最基础的数据结构,关于数据结构与要特别注意的是:首先Redis中所有的键的类型都是字符串类型,而且其他集中数据结构也都是在字符串类似基础上进行构建,例如列表和集合的元素类型是字符串类型&a…...

个人简历html网页模板,科技感炫酷html简历模板

炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…...

【Python爬虫(39)】掌控全局:分布式爬虫的任务管理与监控之道

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…...

输入框元素覆盖冲突

后端响应中的 "trainingKbGroupName": "基础死型" 通过searchForm2.initFormData(rowData[0]);操作会把基础死型四个字填充到<div class"col-sm-5 form-group"> <label class"col-sm-3 control-label">知识点分组名称<…...

R语言学习笔记——确定指标权重:层次分析法/熵权法/CRITIC方法

本文介绍使用R语言确定指标权重的方法&#xff0c;包括&#xff1a;层次分析法、熵权法和CRITIC方法&#xff0c;内容包含了逆向指标正向化处理。 1、层次分析法 #######层次分析法###### ###几何平均法求权重 options(digits 2) library(tidyverse)macro <- tibble(x1c(…...

前端面试之Box盒子布局:核心知识与实战解析

目录 引言&#xff1a;布局能力决定前端高度 一、盒模型基础&#xff1a;看得见的像素战争 1. 标准盒模型 vs IE盒模型 2. 核心组成公式 3. 视觉格式化模型 二、传统布局三剑客 1. 浮动布局&#xff08;Float Layout&#xff09; 2. 定位布局&#xff08;Position Layou…...

前端VUE+后端uwsgi 环境搭建

1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的&#xff0c;uwsgi完全可以完成整个的和浏览器交互的流程&#xff1b;在nginx上加上安全性或其他的限制&#xff0c;可以达到保护程序的作用&#xff1b;uWSGI本…...

保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek

要在Postman中访问Ollama API并调用DeepSeek模型&#xff0c;你需要遵循以下步骤。首先&#xff0c;确保你有一个有效的Ollama服务器实例运行中&#xff0c;并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级&#xff01;使用Ollama本地部署DeepSeek-R1大模型 并java…...

【python】pip命令合集

文章目录 1. 包安装与卸载2. 依赖管理与文件操作3. 包下载与构建4. 配置与缓存管理5. 高级调试与日志6. 虚拟环境集成7. 哈希验证与安全8. 实验性功能&#xff08;可能不稳定&#xff09;9. 其他实用命令参数大全&#xff08;全局常用参数&#xff09;示例场景 conda: 【python…...

【鸿蒙开发】第四十章 Form Kit(卡片开发服务)

目录 1 概述 1.1 卡片使用场景 1.2 服务卡片架构 1.3 亮点/特征 1.4 开发模式 1.5 与相关Kit的关系 1.6 约束限制 2 ArkTS卡片运行机制 2.1 实现原理 2.2 ArkTS卡片的优势 2.3 ArkTS卡片的约束 3 ArkTS卡片相关模块 4 ArkTS卡片开发指导 4.1 创建一个ArkTS卡片 …...

汽车自动驾驶辅助L2++是什么?

自动驾驶辅助级别有哪些&#xff1f; 依照SAE&#xff08;SAE International&#xff0c;Society of Automotive Engineers国际自动机工程师学会&#xff09;的标准&#xff0c;大致划分为6级&#xff08;L0-L5&#xff09;&#xff1a; L0人工驾驶&#xff1a;即没有驾驶辅助…...

微信小程序消息推送解密

package com.test.main.b2b;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Arrays;/*** author * version 1.0* description: 解谜微信小…...

java项目之城市公园信息管理系统的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的城市公园信息管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 城市公园信息…...

EasyRTC:基于WebRTC与P2P技术,开启智能硬件音视频交互的全新时代

在数字化浪潮的席卷下&#xff0c;智能硬件已成为我们日常生活的重要组成部分&#xff0c;从智能家居到智能穿戴&#xff0c;从工业物联网到远程协作&#xff0c;设备间的互联互通已成为不可或缺的趋势。然而&#xff0c;高效、低延迟且稳定的音视频交互一直是智能硬件领域亟待…...

【前端框架】vue2和vue3的区别详细介绍

Vue 3 作为 Vue 2 的迭代版本&#xff0c;在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别&#xff1a; 响应式系统 Vue 2 实现原理&#xff1a;基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时&#xff0c;Vue 会遍历…...

23.1 WebBrowser控件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 WebBrowser控件类似于IE浏览器的文档界面&#xff08;事实上IE也是使用的这个控件&#xff09;&#xff0c;它提供了显示网页及支持…...

从0-1搭建mac环境最新版

从0-1搭建mac环境 先查看自己的芯片信息 bash uname -mbash-3.2$ uname -m arm64这里是自己的型号安装brew xcode-select --install xcode-select -p /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” source /Users/lanren/.…...

Docker-技术架构演进之路

目录 一、概述 常见概念 二、架构演进 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 三、尾声 一、概述 在进行技术学习过程中&am…...

堆、优先队列、堆排序

堆&#xff1a; 定义&#xff1a; 必须是一个完全二叉树&#xff08;完全二叉树&#xff1a;完全二叉树只允许最后一行不为满&#xff0c;且最后一行必须从左往右排序&#xff0c;最后一行元素之间不可以有间隔&#xff09; 堆序性&#xff1a; 大根堆&#xff1a;每个父节点…...

C语言之宏定义

目录 前言 一、宏定义前操作 二、引用自定义.h文件 三、宏定义#define 四、对比typedef的差异 五、替换一个函数或表达式 六、嵌套宏替换 七、用宏和typedef创建一个“布尔型数据 八、定义有参数的宏 总结 前言 C语言中的宏定义是一种预处理指令&#xff0c;用来定义常量、函数…...

大语言模型基础

简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各类应用。AI大模型主要分为三类:大语言模型、CV大模型…...

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体&#xff0c;当输入的值为负数时&#xff0c;会自动显示红色字体&#xff0c;对于数值或者金额输入时该功能就非常有用了。 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.co…...

Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解

Web 自动化测试提速利器&#xff1a;Aqua 的 Web Inspector &#xff08;检查器&#xff09;使用详解 前言简介一、安装二、Web Inspector 的使用2.1 获取元素定位器&#xff08;Locators&#xff09;2.2 将定位器添加到代码2.3 验证定位器2.4 处理 Frames (框架) 总结 前言 Je…...

23种设计模式 - 空对象模式

模式定义 空对象模式&#xff08;Null Object Pattern&#xff09;是一种行为型设计模式&#xff0c;通过用无操作的空对象替代null值&#xff0c;消除客户端对空值的检查&#xff0c;避免空指针异常。其核心是让空对象与真实对象实现相同接口&#xff0c;但空对象不执行实际逻…...

【mysql80 安装】mysql8.0.31 安装修改3306端口

在离线安装 MySQL 时&#xff0c;可以通过修改 MySQL 的配置文件来更改默认的 3306 端口。以下是具体步骤&#xff1a; 1、vim /etc/my.cnf 打开配置文件后&#xff0c;找到 [mysqld] 部分&#xff0c;这是 MySQL 服务的配置区域。在该部分中&#xff0c;找到或添加以下内容&a…...

基于eBPF的全栈可观测性系统:重新定义云原生环境诊断范式

引言&#xff1a;突破传统APM的性能桎梏 某头部电商平台采用eBPF重构可观测体系后&#xff0c;生产环境指标采集性能提升327倍&#xff1a;百万QPS场景下传统代理模式CPU占用达63%&#xff0c;而eBPF直采方案仅消耗0.9%内核资源。核心业务的全链路追踪时延从900μs降至18μs&a…...

C语言基础学习指南:从零入门到实战应用——适合零基础学习者与进阶巩固

目录 一、C语言概述与开发环境搭建 二、核心语法与数据类型 三、控制结构与运算符 四、函数与模块化编程 五、指针与内存管理 六、实践建议与资源推荐 结语 一、C语言概述与开发环境搭建 C语言是一种高效、灵活的通用编程语言&#xff0c;广泛应用于系统开发、嵌入式系…...

软件架构设计:架构风格

一、架构风格概述 定义 架构风格是对软件系统整体结构和组织方式的抽象描述&#xff0c;提供了一套通用的设计原则和模式。 作用 提高系统的可维护性、可扩展性和可复用性。帮助开发团队在设计和实现过程中保持一致性和规范性。 常见架构风格 分层架构、MVC架构、微服务架构、…...

为啥vue3设计不直接用toRefs,而是reactive+toRefs

Vue 3 设计中将 reactive 和 toRefs 结合使用而非直接使用 toRefs&#xff0c;主要基于以下设计考量&#xff1a; 1. 响应式粒度的不同需求 reactive 适用于对象整体响应式 reactive 会为整个对象创建响应式代理&#xff0c;自动追踪对象内部所有属性的变化。这种设计适用于需要…...

go 网络编程 websocket gorilla/websocket

在 Go 语言中&#xff0c;你可以使用标准库中的 net/http 包和第三方库 gorilla/websocket 来实现一个 WebSocket 服务器。gorilla/websocket 库提供了对 WebSocket 协议的高级抽象&#xff0c;使得处理 WebSocket 连接变得相对简单。 package mainimport ("fmt"&qu…...

【微服务】springboot远程docker进行debug调试使用详解

目录 一、前言 二、线上问题常用解决方案 2.1 微服务线上运行中常见的问题 2.2 微服务线上问题解决方案 2.3 远程debug概述 2.3.1 远程debug原理 2.3.2 远程debug优势 三、实验环境准备 3.1 搭建springboot工程 3.1.1 工程结构 3.1.2 引入基础依赖 3.1.3 添加配置文…...

CORS跨域问题常见解决办法

1.引言 在现代前端开发中&#xff0c;跨域资源共享&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是一种通过设置 HTTP 头来允许或阻止不同源之间的资源访问的机制。浏览器出于安全考虑&#xff0c;默认情况下会阻止跨域请求。本文将详细介绍 CORS 的工作原理、…...

并查集算法篇上期:并查集原理及实现

引入 那么我们在介绍我们并查集的原理之前&#xff0c;我们先来看一下并查集所应用的一个场景&#xff1a;那么现在我们有一个长度为n的数组&#xff0c;他们分别属于不同的集合&#xff0c;那么现在我们要查询数组当中某个元素和其他元素是否处于同一集合当中&#xff0c;或者…...

树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络

假设之前已经配置了 在eth0接口配置了192.168.0.100&#xff0c;现在要在同一接口&#xff08;例如 eth0&#xff09;上添加 192.168.1.100&#xff1a; 直接编辑 /etc/NetworkManager/system-connections/ 中相应的连接文件&#xff08;该文件的文件名通常与连接名称相同&…...

「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件

PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件&#xff0c;以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性&#xff0c;如颜色、字体大小、样式和粗细。…...

Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. 环境准备1.1安装 Python1.2选择开发环境1.3安装 MySQL 数据库1.4 安装 pymysql 库 2. 连接数据库3. 数据库基本操作3.1 创建数据库3.2 创建表3.3 插入数据3.…...

Websocket——心跳检测

1. 前言&#xff1a;为什么需要心跳机制&#xff1f; 在现代的实时网络应用中&#xff0c;保持客户端和服务端的连接稳定性是非常重要的。尤其是在长时间的网络连接中&#xff0c;存在一些异常情况&#xff0c;导致服务端无法及时感知到客户端的断开&#xff0c;可能造成不必要…...

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言&#xff1a;金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时&#xff0c;其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中&#xff0c;量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…...

文心智能体平台已全面接入DeepSeek模型,全部免费!

文心智能体平台已全面接入DeepSeek模型&#xff01;即日起&#xff0c;您可以在创建智能体时&#xff0c;自由选择所需要的模型&#xff0c;欢迎大家体验。 ✅ ‌零成本体验‌&#xff1a;当前阶段所有用户可免费使用‌DeepSeek模型。‌ ✅ ‌‌智能适配&#xff1a;4款DeepSe…...

DuodooBMS源码解读之 odoo_phoenix_alarm模块

Odoo18 扩展模块声光报警器用户使用手册 一、模块概述 本扩展模块是基于 Odoo18 原生系统进行开发的&#xff0c;主要用于实现与上位声光报警设备的通讯功能。通过该模块&#xff0c;用户可以方便地向设备发送指令&#xff0c;控制设备的声音、灯光等操作。本手册将详细介绍该…...