知乎 php网站开发书籍/上百度推广的网站要多少钱

知乎 php网站开发书籍,上百度推广的网站要多少钱,微信上打开连接的网站怎么做的,贵州疫情最新情况最新消息今天以下是一些涵盖不同高级JavaScript概念和应用的案例,每个案例都有详细解释: 案例1:实现 Promise/A 规范的手写 Promise class MyPromise {constructor(executor) {this.state pending;this.value undefined;this.reason undefined;this.o…

以下是一些涵盖不同高级JavaScript概念和应用的案例,每个案例都有详细解释:


案例1:实现 Promise/A+ 规范的手写 Promise

class MyPromise {constructor(executor) {this.state = 'pending';this.value = undefined;this.reason = undefined;this.onFulfilledCallbacks = [];this.onRejectedCallbacks = [];const resolve = (value) => {if (this.state === 'pending') {this.state = 'fulfilled';this.value = value;this.onFulfilledCallbacks.forEach(fn => fn());}};const reject = (reason) => {if (this.state === 'pending') {this.state = 'rejected';this.reason = reason;this.onRejectedCallbacks.forEach(fn => fn());}};try {executor(resolve, reject);} catch (err) {reject(err);}}then(onFulfilled, onRejected) {const promise2 = new MyPromise((resolve, reject) => {const microtask = (fn, value) => {queueMicrotask(() => {try {const x = fn(value);resolvePromise(promise2, x, resolve, reject);} catch (e) {reject(e);}});};if (this.state === 'fulfilled') {microtask(onFulfilled, this.value);} else if (this.state === 'rejected') {microtask(onRejected, this.reason);} else {this.onFulfilledCallbacks.push(() => microtask(onFulfilled, this.value));this.onRejectedCallbacks.push(() => microtask(onRejected, this.reason));}});return promise2;}
}// 辅助函数处理不同返回值类型
function resolvePromise(promise2, x, resolve, reject) {// ...完整实现需要处理thenable对象和循环引用等情况
}

技术点

  • Promise状态机实现
  • 微任务队列(queueMicrotask)
  • 链式调用和值穿透
  • 递归解析处理

案例2:使用 Proxy 实现自动化表单校验

const validator = {set(target, prop, value) {const rules = {username: val => val.length >= 5 && val.length <= 20,password: val => /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/.test(val),age: val => Number.isInteger(val) && val >= 18};if (!rules[prop](value)) {throw new Error(`Invalid ${prop} value`);}target[prop] = value;return true;}
};const formData = new Proxy({}, validator);// 使用示例
try {formData.username = 'user123'; // 有效formData.password = 'pass1234'; // 无效,触发错误
} catch (e) {console.error(e.message);
}

技术点

  • Proxy API 的应用
  • 数据劫持与校验
  • 正则表达式验证
  • 自定义错误处理

案例3:实现前端路由系统(Hash模式)

class HashRouter {constructor() {this.routes = {};window.addEventListener('hashchange', this.load.bind(this));}addRoute(path, callback) {this.routes[path] = callback;}load() {const hash = window.location.hash.slice(1) || '/';const [path, queryString] = hash.split('?');const query = new URLSearchParams(queryString);if (this.routes[path]) {this.routes[path](Object.fromEntries(query.entries()));} else {this.routes['404']?.();}}navigate(path, query = {}) {const queryStr = new URLSearchParams(query).toString();window.location.hash = `${path}${queryStr ? `?${queryStr}` : ''}`;}
}// 使用示例
const router = new HashRouter();
router.addRoute('/about', (params) => {console.log('About page', params);
});
router.navigate('/about', { from: 'home' });

技术点

  • Hash路由原理
  • URLSearchParams API
  • 发布-订阅模式
  • 浏览器历史管理

案例4:Web Worker 多线程图像处理

// 主线程
const worker = new Worker('image-worker.js');
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');canvas.addEventListener('change', async (e) => {const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);worker.postMessage({pixels: imageData.data.buffer,width: canvas.width,height: canvas.height,filterType: 'grayscale'}, [imageData.data.buffer]);worker.onmessage = ({ data }) => {ctx.putImageData(new ImageData(new Uint8ClampedArray(data), 0, 0);};
});// image-worker.js
self.addEventListener('message', ({ data }) => {const pixels = new Uint8ClampedArray(data.pixels);// 应用滤镜(灰度化)for (let i = 0; i < pixels.length; i += 4) {const avg = (pixels[i] + pixels[i+1] + pixels[i+2]) / 3;pixels[i] = avg; // Rpixels[i+1] = avg; // Gpixels[i+2] = avg; // B}self.postMessage(pixels.buffer, [pixels.buffer]);
});

技术点

  • Web Worker 多线程
  • Transferable Objects
  • Canvas 像素操作
  • 图像处理算法

案例5:实现 Observable 响应式编程

class Observable {constructor(subscribe) {this._subscribe = subscribe;}subscribe(observer) {const subscription = {unsubscribed: false,unsubscribe() {this.unsubscribed = true;}};this._subscribe({next: val => {if (!subscription.unsubscribed) observer.next(val);},error: err => observer.error?.(err),complete: () => observer.complete?.()});return subscription;}pipe(...operators) {return operators.reduce((prev, fn) => fn(prev), this);}static fromEvent(element, eventName) {return new Observable(observer => {const handler = e => observer.next(e);element.addEventListener(eventName, handler);return () => element.removeEventListener(eventName, handler);});}
}// 使用示例
const click$ = Observable.fromEvent(document, 'click').pipe(throttle(1000),map(e => ({ x: e.clientX, y: e.clientY })));click$.subscribe({next: pos => console.log('Clicked at:', pos)
});

技术点

  • 观察者模式
  • 函数式编程
  • 操作符链式调用
  • 事件流处理

这些案例覆盖了:

  1. 异步编程核心(Promise)
  2. 元编程(Proxy)
  3. 前端架构(路由)
  4. 性能优化(Web Worker)
  5. 响应式编程(Observable)

每个案例都可以进一步扩展实现更多高级功能。例如在Promise实现中添加async/await支持,在路由系统中添加嵌套路由等。

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

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

相关文章

Dify 0.15.3 输入变量无法被重新赋值问题-解决方法

目录 一、问题描述 二、解决方法 2.1 原因 2.2 修改源码 2.3 重新打包 dify-api 镜像 2.4 修改 docker-compose.yaml 文件 2.5 重启启动镜像 一、问题描述 Dify 0.15.3 是一个比较稳定的版本&#xff0c;Dify 1.0 是一个大版本更新&#xff0c;目前还有很多 Bug。但是&a…

SQL Server查询计划操作符(7.3)——查询计划相关操作符(11)

7.3. 查询计划相关操作符 98&#xff09;Table Scan&#xff1a;该操作符从查询计划参数列确定的表中获取所有数据行。如果其参数列中出现WHERE:()谓词&#xff0c;则只返回满足该谓词的数据行。该操作符为逻辑操作符和物理操作符。该操作符具体如图7.3-98节点1所示。 图 7.3-…

数据库练习2

目录 1.向heros表中新增一列信息&#xff0c;添加一些约束&#xff0c;并尝试查询一些信息 2.课堂代码练习 插入语句 INSERT INTO 删除语句DELETE和TRUNCATE 更新语句UPDATE和replace 查询语句SELECT 条件查询 select语句中的特殊情况 ​​​查询排序 order by 分组查询…

资金管理策略思路

详细描述了完整交易策略的实现细节&#xff0c;主要包括输入参数、变量定义、趋势判断、入场与出场条件、止损与止盈设置等多个方面。 输入参数&#xff08;Input&#xff09;&#xff1a; EntryFrL (.6)&#xff1a;多头入场的前一日波动范围的倍数。 EntryFrS (.3)&#xff1…

数据模型,数据建模,组件,核心价值,使用,意义

数据模型 一组由符号,文本组成的集合, 用以准确表达信息景观, 达到有效交流,沟通的目的 数据建模 是发现,分析和确定数据需求的过程,是一种称为数据模型的精确形式表示和传递这些需求 数据模型的组件 实体, 关系, 属性和域 数据模型的核心价值 交流性 精确性 数据模型的…

解锁云原生后端开发新姿势:腾讯云大模型API实战攻略

目录 云原生后端与大模型融合的开篇之章​ 探秘云原生后端开发​ 云原生后端是什么​ 云原生后端架构核心要素​ 微服务架构​ 容器化技术​ 服务发现与配置管理​ Kubernetes 编排​ 走进腾讯云大模型知识引擎​ 引擎独特功能与优势​ DeepSeek - R1、V3 两款模型 …

【拒绝算法PUA】LeetCode 2116. 判断一个括号字符串是否有效

目录 系列文章目录 专题总结&#xff1a; C刷题技巧总结&#xff1a; 题目 2116. 判断一个括号字符串是否有效 难度 描述 解题方法1 系列文章目录 专题总结&#xff1a; 【拒绝算法PUA】0x00-位运算【拒绝算法PUA】0x01- 区间比较技巧【拒绝算法PUA】0x02- 区间合并技…

常见中间件漏洞攻略-Tomcat篇

一、 CVE-2017-12615-Tomcat put方法任意文件写入漏洞 第一步&#xff1a;开启靶场 第二步&#xff1a;在首页抓取数据包&#xff0c;并发送到重放器 第三步&#xff1a;先上传尝试一个1.txt进行测试 第四步&#xff1a;上传后门程序 第五步&#xff1a;使用哥斯拉连接 二、后…

【nodejs】爬虫路漫漫,关于nodejs的基操

一.下载安装nodejs 官网地址&#xff1a;Node.js — 在任何地方运行 JavaScript 二.下载安装vscode代码编辑器 官网地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 三.修改本地脚本策略 1&#xff0c;windowsi 打开电脑设置 2&#xff0c;输入powersh…

Java EE(16)——网络原理——TCP协议解析二

4.滑动窗口(效率机制) 上篇博客讲到的确认应答/超时重传/连接管理都是安全机制&#xff0c;但也会降低传输效率。滑动窗口就是在保证可靠传输的基础上&#xff0c;尽可能地提高传输效率。 根据确认应答机制&#xff0c;客户端每发送一个请求都需要收到服务器的确认应答报文后才…

从入门到精通【MySQL】 CRUD

文章目录 &#x1f4d5;1. Create 新增✏️1.1 单行数据全列插入✏️1.2 单行数据指定列插入✏️1.3 多行数据指定列插入 &#x1f4d5;2. Retrieve 检索✏️2.1 全列查询✏️2.2 指定列查询✏️2.3 查询字段为表达式✏️2.4 为查询结果指定别名✏️2.5 结果去重查询 &#x1f…

C++学习之云盘上传文件列表下载

1.上传打开文件操作 1. 注册 客户端 成功 {"code":"002"} 该用户已存在 {"code":"003"} 失败 {"code":"004"} 服务器 2. 登录 客户端 服务器 // url http: //127.0.0.1:80/reg // post 数据格式 …

详细解析格式化消息框的代码

书籍&#xff1a;《windows程序设计(第五版)》的开始 环境&#xff1a;visual studio 2022 内容&#xff1a;格式化消息框 说明&#xff1a;以下内容大部分来自腾讯元宝。 封装MessageBoxPrintf 在MessageBoxPrintf()中处理可变参数&#xff0c;通过va_list机制&#xff0c…

【SpringSecurity】详细核心类与过滤器流程讲解和封装通用组件实战

Spring Security 全面介绍 1. 什么是 Spring Security&#xff1f; Spring Security 是一个功能强大且高度可定制的认证和访问控制框架&#xff0c;是保护基于 Spring 的应用程序的标准工具。它是一个专注于为 Java 应用程序提供认证和授权的框架&#xff0c;实际上它是 Spri…

[入门]NUC13配置Ubuntu20.04详细步骤

文章目录 1. 安装Ubuntu20.041.1 制作系统启动盘1.1.1 下载镜像文件1.1.2 配置启动盘 1.2 安装内存条、硬盘1.3 安装系统 2. 网卡驱动配置2.1 关闭安全启动2.2 安装intel官方网卡驱动backport2.2.1 第四步可能会出现问题 2.3 ubuntu官方的驱动2.4 重启 3. 软件安装3.1 录屏软件…

(七)Reactor响应式编程框架

一、简介 Reactor 是运行在 JVM 上的编程框架&#xff0c;最大特点是完全非阻塞&#xff0c;能高效控制 “背压”&#xff0c;简单来说就是处理数据传输时速度不匹配的问题 。它能和 Java 8 里的一些功能直接搭配使用&#xff0c;像处理异步结果的 CompletableFuture、处理数据…

【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8

目录 通过 apt-get 直接安装 JDK 1. 更新 apt 软件源 2. 检查 JDK 是否已安装 3. 安装OpenJDK 4. 检查 JDK 是否成功安装 5. 设置 JAVA_HOME 环境变量 找到需要设置的 Java 路径 使用文本编辑器打开/etc/environment文件 添加 Java 安装路径 应用更改和验证配置 通过…

Linux系统管理与编程08:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 3 …

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(frontrear)-出队-入队-队尾满了&#xff0c;调整队列-获取队头元素——完整可运行代码 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…

基于LabVIEW的Windows平台高速闭环控制

在Windows系统下&#xff0c;通过LabVIEW实现高速闭环控制面临两大核心挑战&#xff1a;非实时操作系统的调度延迟与硬件接口的传输速度限制。以USB-6351&#xff08;NI USB-6351 DAQ卡&#xff09;为例&#xff0c;其理论采样率可达1.25 MS/s&#xff08;单通道&#xff09;&a…