来年做那些网站能致富做网站程序先从哪一步开始

张小明 2026/1/6 8:09:58
来年做那些网站能致富,做网站程序先从哪一步开始,网站建设代码出现乱码,淘宝推广公司基础问答问#xff1a;Proxy 是什么#xff1f;怎么使用的#xff1f;答#xff1a;Proxy 是用于创建 “对象代理” 的构造函数#xff0c;它能封装目标对象#xff08;target#xff09;#xff0c;并通过 “拦截器对象#xff08;handler#xff09;” 自定义目标对…基础问答问Proxy 是什么怎么使用的答Proxy 是用于创建 “对象代理” 的构造函数它能封装目标对象target并通过 “拦截器对象handler” 自定义目标对象的基础操作如属性读取、赋值实现对对象行为的 “劫持”手写使用方式。// 语法new Proxy(target, handler)// 参数target-目标对象handler-拦截器对象// 返回值代理实例proxyconst target { name: 前端面试, age: 2 };// 定义拦截器对象const handler {// 拦截“读取属性”操作参数为target目标对象、prop属性名、receiver代理实例get(target, prop, receiver) {console.log(触发get拦截读取属性${prop});// 执行原始读取操作通过Reflect确保this指向正确return Reflect.get(target, prop, receiver);},// 拦截“赋值属性”操作参数为target、prop、value新值、receiverset(target, prop, value, receiver) {console.log(触发set拦截给属性${prop}赋值${value});// 自定义逻辑校验age属性必须为数字if (prop age typeof value ! number) {throw new Error(age属性必须是数字);}// 执行原始赋值操作return Reflect.set(target, prop, value, receiver);}};// 创建代理实例const proxy new Proxy(target, handler);// 操作代理实例触发拦截console.log(proxy.name); // 输出触发get拦截读取属性name → 前端面试proxy.age 3; // 输出触发set拦截给属性age赋值3 → 成功proxy.age 3; // 输出触发set拦截给属性age赋值3 → 抛出错误age属性必须是数字// 直接操作目标对象不会触发拦截console.log(target.name); // 输出前端面试无拦截日志target.age 4; // 无拦截日志且不会触发age的类型校验扩展延伸Proxy API 的核心三要素是“目标对象target”“拦截器对象handler”“代理实例proxy”。目标对象target被代理的原始对象可以是对象、数组、函数甚至另一个 Proxy 实例拦截器handler包含 “拦截方法” 的对象每个拦截方法对应一种目标对象的基础操作如get拦截属性读取set拦截属性赋值代理实例proxy通过new Proxy(target, handler) 创建的代理对象所有对目标对象的操作需通过代理实例完成才能触发拦截器。也就是说直接操作目标对象就不会走代理。Proxy 是一种非侵入性的 API他不会修改目标对象本身的结构或方法所有拦截逻辑都封装在拦截器中实现 “代理行为” 与 “目标对象” 的解耦相对 Object.defineProperty 更加灵活。拦截器方法除了基础的 get/set 方法需要注意一些特殊的拦截方法has/deleteProperty/apply/construct拦截方法 作用 关键参数 适用场景get 拦截属性读取含 obj.prop、obj [prop] target, prop, receiver 数据劫持如响应式、默认值设置set 拦截属性赋值 target, prop, value, receiver 数据校验、值格式化has 拦截 in 运算符如prop in proxy target, prop 权限控制隐藏某些属性不被检测deleteProperty 拦截 delete 操作如delete proxy.prop target, prop 禁止删除关键属性apply 拦截函数调用仅当 target 是函数时 target, thisArg, args 函数参数校验、调用日志记录construct 拦截 new 操作仅当 target 是构造函数时 target, args, newTarget 构造函数参数校验、实例计数如果你使用 Vue3 框架需要知道的时 Vue3 的响应式设计就是基于 Proxy 的这是一个简化版的响应式 API 设计// 存储当前活跃的副作用函数如组件渲染函数let activeEffect null;// 依赖映射表target → { prop → [effect1, effect2,...] }const targetMap new WeakMap();// 1. 依赖收集函数将副作用函数与target、prop关联function track(target, prop) {if (!activeEffect) return; // 无活跃副作用不收集// 确保target在targetMap中存在映射let depsMap targetMap.get(target);if (!depsMap) {depsMap new Map();targetMap.set(target, depsMap);}// 确保prop在depsMap中存在副作用数组let deps depsMap.get(prop);if (!deps) {deps new Set(); // 用Set避免重复副作用depsMap.set(prop, deps);}// 添加当前副作用函数deps.add(activeEffect);}// 2. 依赖触发函数执行target、prop对应的所有副作用function trigger(target, prop) {const depsMap targetMap.get(target);if (!depsMap) return;const deps depsMap.get(prop);if (deps) {deps.forEach(effect effect()); // 执行所有副作用}}// 3. 响应式函数创建Proxy代理实现依赖收集与触发function reactive(target) {return new Proxy(target, {get(target, prop, receiver) {const value Reflect.get(target, prop, receiver);track(target, prop); // 读取时收集依赖// 若value是对象递归创建响应式深度响应if (typeof value object value ! null) {return reactive(value);}return value;},set(target, prop, value, receiver) {const oldValue Reflect.get(target, prop, receiver);const success Reflect.set(target, prop, value, receiver);if (success oldValue ! value) {trigger(target, prop); // 赋值时触发依赖}return success;}});}// 4. 副作用函数注册执行fn并收集其依赖function effect(fn) {activeEffect fn;fn(); // 执行fn触发get拦截收集依赖activeEffect null; // 重置避免后续误收集}// 测试响应式const data reactive({ count: 0 });// 注册副作用函数模拟组件渲染effect(() {console.log(视图更新count ${data.count});});// 修改数据触发副作用视图更新data.count 1; // 输出视图更新count 1data.count 2; // 输出视图更新count 2面试追问Proxy 和 Object.defineProperty 都能实现数据劫持为什么 Vue3 放弃 Object.defineProperty 改用 Proxy两者的核心差异是什么对比维度 Object.defineProperty Proxy劫持范围 仅能劫持 “对象的单个属性”需遍历属性逐个定义 直接劫持 “整个对象”无需遍历属性数组支持 无法劫持数组的原生方法如 push、splice需重写数组原型 能拦截数组的所有操作包括索引赋值、原生方法调用嵌套对象处理 需递归遍历所有嵌套对象手动为每个属性定义劫持 可在 get 拦截中递归创建代理按需劫持性能更优性能 初始化时需遍历所有属性嵌套层级深时性能差 懒加载式劫持访问嵌套对象时才创建代理初始化性能更优用 Proxy 拦截对象属性赋值时若目标对象是冻结对象Object.freezeset 拦截器还能生效吗为什么set 拦截器会触发但最终赋值会失败Object.freeze (target) 会让目标对象的属性变为 “不可写、不可配置”但不会阻止 Proxy 拦截器的触发拦截器是对操作的劫持而非直接修改属性。若用 Proxy 代理一个频繁修改的大型对象如包含 1000 个属性的列表会有性能问题吗如何优化会有性能问题需要从两方面考虑1. 若拦截器逻辑复杂如每次 get/set 都执行大量校验、日志记录频繁操作时会累积性能损耗2. 对嵌套层级极深的大型对象若初始化时递归创建代理而非按需劫持会导致初始化耗时过长。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

无锡公司网站设计有了阿里云服务器怎么做网站

这个错误的核心原因是:你的本地SSH客户端记录的 172.20.10.3 主机公钥,和当前该主机返回的公钥不一致(比如香橙派重装系统、更换SSH配置、IP被复用等),SSH为了防止中间人攻击,拒绝连接。 以下是Windows系统…

张小明 2025/12/29 4:03:43 网站建设

企业建立网站需要什么条件学生网站建设总结报告

对等网络中的微支付与声誉系统解析 1. 微支付在对等网络中的应用与挑战 在对等网络系统中,无论是采用微支付还是宏支付,系统设计者都必须考虑到这些支付方式本身可能成为拒绝服务(DoS)攻击的目标。攻击者可能会用大量廉价伪造的货币充斥系统,仅通过验证过程就消耗大量计…

张小明 2025/12/30 16:32:49 网站建设

网站框架都有什么用微网站 获取手机号

第一章:phoneagent Open-AutoGLM架构全景概览Open-AutoGLM 是 phoneagent 项目中核心的自动化推理架构,旨在实现基于大语言模型的任务理解、工具调度与执行反馈闭环。该架构融合了自然语言理解、动态函数绑定和多模态交互能力,支持在移动设备…

张小明 2025/12/30 16:32:48 网站建设

大连网站制作团队做网站要不要签合同

在Android开发中,屏幕适配一直是开发者面临的重大挑战。不同设备的分辨率、尺寸和密度差异使得界面布局难以统一。AndroidAutoSize作为基于先进屏幕适配方案的终极版本,提供了一个极低成本的Android屏幕适配解决方案,让开发者能够轻松应对各种…

张小明 2025/12/30 16:32:45 网站建设

站长之家ping检测wordpress插件描述

如何快速掌握有限元分析:零基础学习的完整指南 【免费下载链接】有限元基础课程资源-何晓明 本仓库提供了一个关于有限元基础课程的资源文件下载,课程由何晓明讲授。资源文件包括上课课件、九次作业的MATLAB代码以及课堂答疑内容。这些资源非常适合正在学…

张小明 2026/1/4 1:44:25 网站建设

网站建设项目需求自己建网站做网店

当AI也有“精神内耗”?2025AI研究揭露大模型的“情绪秘密” 2025年一项炸裂的研究结论,让AI圈炸开了锅:Gemini被指缺乏自信心,Grok内耗严重,就连顶流的ChatGPT都被检测出有“抑郁症”倾向。当我们还在惊叹AI的智能迭代…

张小明 2025/12/31 19:05:54 网站建设