JavaScript学习—JavaScript高级

原型链和继承

在 JavaScript 中,每个对象都有一个原型(prototype),这个原型指向另一个对象。这个链式的原型关系被称为原型链。当访问一个对象的属性时,如果该对象没有该属性,它会沿着原型链向上查找,直到找到该属性或到达原型链的末端。

// 创建一个构造函数 Person
function Person(name, age) {this.name = name;this.age = age;
}// 添加一个方法到 Person.prototype
Person.prototype.greet = function() {console.log(`Hello, my name is ${this.name} and I am${this.age} years old.`);
};// 创建一个 Person 实例
const person1 = new Person("Alice", 30);// 调用 greet 方法
person1.greet(); // Hello, my name is Alice and I am 30 years old.

继承可以通过原型链实现,也可以通过原型式继承(如 Object.create())、组合继承(使用原型链和构造函数)等方式实现。

作用域链和闭包

作用域链是 JavaScript 引擎在执行代码时创建的一个链式结构,用于在函数内部访问变量。这个链从当前函数的作用域开始,然后是外部函数的作用域,最后是全局作用域。

闭包是一个函数及其作用域内的变量组成的组合,即使外部函数执行完毕,闭包中的变量也不会被销毁。

function outerFunction() {var outerVariable = "I am outer";function innerFunction() {console.log(outerVariable); // 访问外部函数的变量}return innerFunction;
}const inner = outerFunction();
inner(); // I am outer

异步编程

回调函数是一种在异步操作完成后执行的函数。

function fetchData(callback) {setTimeout(() => {callback("Data fetched successfully!");}, 2000);
}fetchData((data) => {console.log(data);
});

Promise 是一种对象,用于异步操作的结果。

const fetchData = () =>new Promise((resolve, reject) => {setTimeout(() => {resolve("Data fetched successfully!");}, 2000);});fetchData().then((data) => {console.log(data);}).catch((error) => {console.error(error);});

async/await 是 ES2017 引入的语法糖,用于处理 Promise。

async function fetchData() {try {const data = await new Promise((resolve, reject) => {setTimeout(() => {resolve("Data fetched successfully!");}, 2000);});console.log(data);} catch (error) {console.error(error);}
}fetchData();

ES6+ 新特性

  • let 和 constlet 声明的变量具有块级作用域,const 声明的变量是常量,一旦声明不能更改。
if (true) {let message = "Hello";console.log(message); // Hello
}const pi = 3.14159;
pi = 3; // 错误,不能更改 pi 的值
  • 模板字符串:使用反引号````表示,可以在字符串中嵌入变量。
const name = "Alice";
const age = 30;
const greeting = `Hello, my name is ${name} and I am${age} years old.`;
console.log(greeting); // Hello, my name is Alice and I am 30 years old.
  • 箭头函数()=>{},用于简化函数声明。
const greet = (name) => `Hello, ${name}!`;
console.log(greet("John")); // Hello, John!
  • 解构赋值:允许从数组或对象中提取值并赋给变量。

    const person = { name: "Alice", age: 30 };
    const { name, age } = person;
    console.log(name); // Alice
    console.log(age); // 30
    
  • 模块化:通过 import 和 export 语句来导入和导出模块。
  • // module1.js
    export const add = (a, b) => a + b;// module2.js
    import { add } from './module1';
    const result = add(5, 3);
    console.log(result); // 8
    
  • 其他新特性:如 PromiseSetMapProxyReflectSymbol 等。
  • Promise

    Promise 是一个对象,用于异步操作的结果。它有三种状态:pending(进行中)、fulfilled(已完成)和 rejected(已失败)。

    const fetchData = () =>new Promise((resolve, reject) => {setTimeout(() => {resolve("Data fetched successfully!");}, 2000);});fetchData().then((data) => {console.log(data);}).catch((error) => {console.error(error);});
    

    Set 和 Map

  • Set:类似于数组,但成员的值都是唯一的,没有重复的值。
  • const numbers = new Set([1, 2, 3, 4, 5]);
    console.log(numbers); // Set(5) {1, 2, 3, 4, 5}
    
  • Map:类似于对象,但它的键可以是任何值,且键是唯一的。
  • const map = new Map([["name", "Alice"],["age", 30],
    ]);
    console.log(map); // Map(2) {name: "Alice", age: 30}
    

    Proxy

    Proxy 是一种对象,它可以拦截对象上的操作,如属性访问、属性设置、函数调用等。

    const person = { name: "Alice", age: 30 };
    const proxy = new Proxy(person, {get: (target, key) => {if (key === "age") {return target[key] * 2; // 返回年龄的两倍}return target[key];},
    });console.log(proxy.name); // Alice
    console.log(proxy.age); // 60
    

    Reflect

    Reflect 是 JavaScript 语言的一个内置对象,它提供了一些与 JavaScript 对象操作相关的方法。

    const person = { name: "Alice", age: 30 };
    const keys = Reflect.ownKeys(person);
    console.log(keys); // ["name", "age"]
    

    Symbol

    Symbol 是 ES6 引入的一种新的原始数据类型,表示独一无二的值。

    const symbol = Symbol("unique");
    console.log(typeof symbol); // "symbol"
    console.log(symbol === symbol); // false
    

    这些新特性使得 JavaScript 更加强大和灵活,有助于编写更简洁、更易于维护的代码。随着 JavaScript 语言的不断进化,开发者需要不断学习和适应新的特性和变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客网刷题 | BC80 奇偶统计

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 任意输入一个正整数…

迅饶科技 X2Modbus 网关 AddUser 任意用户添加漏洞复现

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

Python运维-文本处理、系统和文件信息监控、外部命令

本节主要目录如下: 一、文本处理 1.1、Python编码解码 1.2、文件操作 1.3、读写配置文件 1.4、解析XML文件 二、系统信息监控 2.1、监控CPU信息 2.2、监控内存信息 2.3、监控磁盘信息 2.4、监控网络信息 2.5、获取进程信息 2.6、实例:常见的…

【知识点随笔分享 | 第十篇】快速介绍一致性Hash算法

前言: 在分布式系统中,数据的分布和负载均衡是至关重要的问题。一致性哈希算法是一种解决这些挑战的有效工具,它在分布式存储、负载均衡和缓存系统等领域得到了广泛应用。 随着互联网规模的不断扩大,传统的哈希算法在面对大规模…

cmake进阶:变量的作用域(目录作用域与全局作用域)

一. 简介 前面从函数作用域方面学习了变量的作用域,本文从目录作用域方面来学习变量的作用域。 二. cmake进阶:从目录作用域方面学习变量的作用域 1. 目录作用域 什么是目录作用域? 我把这个作用域叫做目录作用域。子目录会将父目录的所…

Web3 ETF软件系统的主要功能

下面是Web3 ETF系统软件的主要功能,这些功能共同构成了Web3 ETF系统软件的核心,使其能够有效地为投资者提供Web3技术相关的投资机会,同时确保合规性、安全性和透明度。北京木奇移动软件有限公司,专业的软件外包开发公司&#xff0…

【Git】Git学习-10-11:GitHub,SHH配置,克隆仓库

学习视频链接:【GeekHour】一小时Git教程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 创建仓库 配置SSH密钥可以更加安全,方便地推送、拉取代码 根目录下,进入.ssh文件&am…

【C语言】——联合体与枚举

【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体   与…

学习R语言第五天

文章目录 语法学习创建数据的方式绘制图形的方式图形添加颜色如何操作数据的方式数据进行验算的判断加付值的方式修改变量名称的方式判断是否存在缺失值在计算的方式忽略缺失值通过函数的方式忽略缺失值日期处理的方式字符串转化成日期的方式格式化数据框中数据返回当前的日期的…

19_Scala集合概述

文章目录 集合回顾javaScala集合三大类String & StringBuilderScala集合两大类 集合 回顾java scala与Java有所不同 函数式编程语言更侧重集合本身提供的哪些功能; Scala集合三大类 1.Seq 存储有序数据可重复 类比 List 2.Set 存储无序数据不可重复 3.Map…

【算法系列】字符串

目录 leetcode题目 一、最长公共前缀 二、最长回文子串 三、二进制求和 四、字符串相加 五、字符串相乘 六、仅仅反转字母 七、字符串最后一个单词的长度 八、验证回文串 九、反转字符串 十、反转字符串 II 十一、反转字符串中的单词 III leetcode题目 一、最长公…

frp内网穿透服务搭建与使用

frp内网穿透服务搭建与使用 1、frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp工作原理 服务端运行,监听一个主端口…

Parts2Whole革新:多参照图定制人像,创新自定义肖像生成框架!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! Parts2Whole革新:多参照图定制人像,创新自定义肖像生成框架! 引言:探索多条件人像生成的新篇章 在数字内容创作…

论文精读-存内计算芯片研究进展及应用

文章目录 论文精读-存内计算芯片研究进展及应用概述背景介绍前人工作 存内计算3.1 SRAM存内计算3.2 DRAM存内计算3.3 ReRAM/PCM存内计算3.4 MRAM存内计算3.5 NOR Flash存内计算3.6 基于其他介质的存内计算3.7 存内计算芯片应用场景 总结QA 论文精读-存内计算芯片研究进展及应用…

SpringBoot中实现发送邮件

概要 在Spring Boot中发送电子邮件相对简单。你可以使用Spring的邮件支持来实现这一点。 步骤: 1.添加依赖:首先,需要在你的pom.xml文件中添加Spring Boot的邮件发送器依赖。 2. 配置邮件服务器:在application.properties或app…

嵌入式全栈开发学习笔记---C语言笔试复习大全14

目录 指针初级 指针的概念 指针类型 指针类型长度 指针的定义 通过指针访问数据 p1和*p1的区别 指针做函数参数 上一篇复习了8道编程题,这篇开始正式复习之指针! 说明:我们学过单片机的一般都是有C语言基础的了,网上关于C…

网络 IO 模式

同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时,需要等待操作完成后才能继续执行后面的程序。这种模式下,当程序使用阻塞式 IO 时,会一直等待IO操作完成,程序会暂停执行…

​​【收录 Hello 算法】3.3 数字编码

目录 3.3 数字编码 3.3.1 原码、反码和补码 3.3.2 浮点数编码 3.3 数字编码 Tip 在本书中,标题带有 * 符号的是选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必读章节后再单独攻克。 3.3.1 原码、反码和补码 在…

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息(Message)1.2 主题(Topic)1.3 标签(Tag)1.4 队列&#xff0…

RK3576芯片规格,以及与RK3588对比

瑞芯微RK3576是一款高性能、低功耗的SoC(系统级芯片)处理器,适用于基于ARM的PC、边缘计算设备、个人移动互联网设备等多种应用场景。它采用Arm架构的八核心CPU,集成了GPU、MCU、NPU、VPU等多种计算核心,并具有丰富的外…