- 博客(38)
- 收藏
- 关注
原创 【设计模式】发布订阅模式,构建可以接收历史消息的观察者类
发布者(被观察者)和订阅者(观察者)。通常的操作是:订阅者订阅发布者的某一个事件,发布者接收到这个事件变化的时候,通知所有的订阅者。举个栗子:你在微信中关注了一个公众号,这个公众号在更新文章的时候,微信会将新的文章推送到你的微信消息中,公众号是发布者,你的微信号是订阅者。你可以关注多个公众号,公众号也可以有多个粉丝。发布订阅模式的优点是可以很方便的实现不同模块之间的通信。它的缺点在于,观察者对象本身是占用内存的,而且当你订阅一个消息后,也许此消息再也没有发布过,但这个观察者对象会始终存在于内存中。
2024-04-28 14:31:51
344
原创 【设计模式】使用策略模式优化表单校验逻辑
所谓策略,就是根据已知条件决定要做出怎样的行为。举个栗子:我要实现一个表单校验功能,要求name不能为空且长度必须大于 2 且小于 4,age不能为空且必须为纯数字。这样的判断逻辑直接用if-else// 表单校验逻辑if (!alert("name 不能为空");alert("name 长度必须大于 2 ");alert("name 长度必须小于 4");if (!alert("age 不能为空");if (!alert("age 只能为数字");最终实现的valid()
2024-04-25 17:46:14
869
原创 【设计模式】使用中介者模式优化表单交互
在程序里,也许一个对象会和其他 10 个对象打交道,所以它会保持 10 个对象的引用,并且自己维护与其他对象的交互逻辑。当程序的规模增大,对象会越来越多,它们之间的关系也越来越复杂,难免会形成网状的交叉引用。中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的相关对象都通过中介者对象来通信,而不是互相引用所以当一个对象发生改变时,只需要通知中介者对象即可。在中介者模式里,对象之间几乎不知道彼此的存在,它们只能通过中介者对象来互相影响对方。
2024-04-24 12:05:04
913
原创 【设计模式】使用 Builder 模式优化参数极多的函数
这样定义的问题是:需要将参数写在固定的位置,随着参数的增多,这种传参方式会变得难以维护。如果遇到某些定义在中间位置的参数为可选参数时,比如上面定义的idCard。
2024-04-22 16:33:15
597
原创 【小程序】fail can only be invoked by user TAP gesture 唤起订阅消息多端兼容解决方案
在对接消息订阅功能时,出现了调用后无法唤起订阅消息窗口的情况。
2023-07-12 15:01:51
5070
原创 【Vue】如何避免mixin导致的混乱
Vue2 中可以使用 mixin 来封装可复用的逻辑,它可以向一个对象注入另一个对象的所有属性,这让它非常灵活,但是同时也带来了一些问题: 来源不明、无法精确引入、命名冲突。
2023-07-03 11:23:56
985
1
原创 【JavaScript】深度剖析prototype与__proto__到底是什么以及他们的关系
prototype是什么,__proto__是什么,prototype和__proto的关系 ,为什么Function.prototype是函数
2023-02-16 11:57:40
557
原创 【JavaScript】实现类似Express的中间件系统
在 Express 中可以给一个请求设置若干个中间件,在处理响应时会按顺序执行这些中间件,正在执行的中间件可以控制是否执行下一个中间件。方法设置中间件时,将传入的回调函数包装成一个返回 Promise 对象的新函数。决定要执行的中间件,然后遍历中间件列表,拼接成一个 Promise 链。方法中,给实际的中间件函数传递一个方法,这个方法调用后。应用级中间件总是会执行,只调用。方法,则会停止执行后续中间件,并将抛出的异常对象(或。方法接收到的对应 url 的路由中间件。绑定的中间件为应用级中间件,用。
2023-02-13 10:53:11
615
原创 【axios】从源码解析axios拦截器是如何工作的
从源码解析axios拦截器是如何工作的,axios 拦截器的实现原理,axios 拦截器 synchronous 属性的作用
2023-02-10 10:29:35
713
原创 【http】https协议
http 协议中没有加密机制,但可以通 过和 SSL(Secure Socket Layer, 安全套接层 )或 TLS(Transport Layer Security, 安全层传输协议)的组合使用来加密 http 的通信内容。
2023-01-30 15:49:57
201
原创 【Vue】Vue.extend()在非vue项目中使用vue组件
假设项目目录结构如下:在 引入 组件:此时 组件已被添加至页面中,可通过组件实例()控制组件:
2022-06-30 14:47:28
670
原创 栈溢出与递归优化
关于栈溢出错误函数调用会在内存形成一个 调用记录,又称 调用帧(call frame),保存调用位置和内部变量等信息,所有的调用帧存放在调用堆栈中。在函数中调用函数会保存之前的调用栈数据,将新的调用帧入栈。栈溢出错误常见于递归操作,函数不断地重复调用自身导致调用堆栈不断堆叠,在超出浏览器限制的调用堆栈大小时抛出栈溢出错误 Uncaught RangeError: Maximum call stack size exceeded递归优化以阶乘函数为例:function factorial(n) {
2022-02-25 10:38:20
462
原创 【git】合并两个不同仓库
背景A 项目由 B 项目变体而来,在 A 上进行到一些共同性修改需要同步到 B 项目上A 的git地址为:A.gitB 的地址为:B.git解决方案把A的具体提交合并到B上思路是把 A 中修复问题的提交(commit)合并到 B 中这样做合并到文件更加具体,造成的冲突会很少在项目 A 中git checkout -b fix_bug 从当前分支创建分支,同时切换到这个分支在项目 B 中git remote add origin_A A.git 添加A的远程地址g
2021-06-09 17:08:36
644
原创 【Angular】在Angular中监听某个值的变化
在 Angular 中可以用 getter 来监听某个值的变化,类似于 Vue 中的 watch
2021-05-18 16:12:45
8096
原创 小程序editor和input在同一个页面时,input会触发editor的聚焦
问题input 和 editor 在同一个页面,在富文本编辑器中编辑文本后点击 input 框页面会回到编辑富文本的高度点击富文本富文本编辑后点击input此时页面会被上滑到富文本编辑器的高度(编辑器聚焦时页面会被上推,系统行为以保证编辑区可见)解决方案给 editor 组件绑定 blur 事件,手动触发编辑器的blur事件<editor @blur="blur" > </editor>blur() { this.editorCtx.blur();
2021-04-24 14:13:28
1063
1
原创 【小程序】微信小程序登录与授权
wx.getUserInfo() 无法获取用户信息授权与登录之间没有必然的联系,授权是为了提供更多的功能(平台限制一些api只能授权后使用),登录是为了确定当前是哪个用户登录流程所谓登录就是确定当前是哪个用户在微信小程序中就是从微信官方获取用户的唯一标识 openid(当前应用)和unionid(当前微信开放平台账号) 然后通过 openid或unionid 绑定用户的过程
2021-04-12 11:49:14
867
原创 【Git】Git工作流程及常用命令
为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件git 工作流程workspace 工作空间本地的、正在修改的内容,通常这里的文件状态是最新的任何对象都是在工作空间中诞生和被修改状态变化通过 git add 命令将新增、修改的文件添加到暂存区通过 git commit -a 命令将文件状态直接更新到本地仓库通过 git pull 命令从远程仓库拉取远程仓库的最后版本通过 git checkout 命令从暂存区拉取检出文件(覆盖本地)通过 git.
2021-03-12 16:11:42
296
原创 【CSS】线性渐变属性值及范例详解
渐变色函数的结果属于 <gradient> 数据类型,是一种特别的 <image> 数据类型,所以渐变色只能被用于<image>可以使用的地方linear-gradient() 线性渐变语法linear-gradient( <angle> | <side-or-corner>, <color-stop-list>, ?<color-hint> )<angle>用角度值指定渐变的方向(或角度)。角度顺.
2021-01-25 14:59:39
1465
原创 【Vue】watch与$watch使用详解
`vue-watch` 有两个可配置项 `deep`、`immediate`,分别表示是否**深度监听**及是否**立即调用**`watch` 的定义形式包括:`函数`、`对象`、`字符串`、`数组`监听多个数据变化
2020-11-20 12:00:56
1879
原创 【Vue】加载异步组件时的resolve函数
1. `resolve => require(['/foo'], resolve)` 中的 `resolve` 是什么?2. `require` 的二参是什么?
2020-07-21 16:32:37
11222
原创 【MongoDB】配置及基本操作
MongoDB配置一、下载安装在官网下载安装包 MongoDB下载地址安装时不要安装图形界面(左下角复选框), 特别慢二、启动服务假设安装目录为 E:\mongodb, windows 下的斜杠为 \在 MongoDB 安装目录的 \bin 目录下执行命令 mongod --dbpath "e:\mongodb\data"三、命令行指令show dbs 显示所有数据库db ...
2020-04-13 16:08:58
244
原创 【Vue】- Router
Vue Router基础路由的使用步骤是:引入Vue及Vue Router告诉Vue Router在哪里渲染(HTML)把组件(components)映射到路由上在vue实例上注入路由一)基础路由配置给同一个路径匹配多个路由时,先定义的路由优先级最高<div id="app"> <h1>Hello App</h1> <p>...
2020-03-18 11:46:47
242
原创 【Vue】 - 组件
组件一、组件注册方式组件名为驼峰式(comName)定义时,可以通过 com-name 的形式引用(不区分大小写)直接在页面中引用时只能用 kebab-case 的组件名引用(com-name)一)全局注册Vue.component('component-name', {})二)局部注册new Vue({ components: { 'component-a': Co...
2020-03-12 21:20:37
174
原创 【JS】兼容 -JS控制浏览器全屏操作
控制浏览器全屏函数和属性需要根据浏览器添加不同的前缀浏览器前缀chromewebkitfirefoxmoziemsoperaorequestFullScreen() 开启全屏显示cancelFullScreen() 退出全屏显示fullScreenElement 判断当前全屏状态1.全屏需要一个dom元素来调用,将选中的元素全...
2020-03-09 10:12:16
434
原创 【CSS】 - Flex布局
Flex布局Flex盒子有两条轴线,主轴(main axis)和交叉轴(cross axis), 默认主轴方向为水平向右,交叉轴为与主轴垂直向下一、设置在容器上的属性属性描述flex-direction设置主轴方向(交叉轴与主轴垂直)flex-wrap设置内部项目换行方式flex-flow上面两个属性的 复合 写法justify-content...
2020-02-26 13:59:28
449
原创 百度地图 - 打开信息窗口错误:Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
问题:自动切换并无问题,但是在手动关闭信息窗口后下一个窗口无法打开原因:关闭窗口会删除窗口中的元素,下一次要打开窗口时找不到目标元素
2019-11-04 12:38:53
1169
原创 console对象方法汇总及特殊输出
1.简单输出 console.log(); // 信息 console.info(); // log的别名 console.warn(); // 警告 console.error(); // 错误 console.clear(); // 清空输出2.分组输出console.group(); // 配合groupEnd对输出分组console...
2019-09-09 15:21:31
862
原创 关于window.scroll系列方法汇总 & 滚动到指定元素位置
1.window.scroll()概述滚动窗口至文档中的特定位置。语法window.scroll(x-coord, y-coord) // 参数表示想要置于左上角的像素点的横纵坐标2.window.scrollBy()概述在窗口中按指定的偏移量滚动文档(相对于当前位置进行偏移)语法window.scrollBy(x-coord, y-coord); ...
2019-08-20 10:52:21
14674
原创 算法及思路(二)
1.三数之和 -- 哈希表思想ps:判断数组元素是否相同时先转换为字符串再进行比较思路1: 拉到两人后登记在册找符合要求的第三人(会有重复的组合) // 双重循环,保存已有的两个数为数组[-1,0],寻找符合条件的第三个数 // 用哈希表存储,key为符合的值,value为已存在的两值的数组 // 如当前循环中 i==-1, j==0;则obj [1] == [-...
2019-07-13 11:47:39
185
原创 算法及思路(一)
目录1.千分位2.两数之和3.最长不重复子串4.罗马数字转换为整数5.判断数字是否为回文数6.Z字形变换7.寻找两个有序数组的中位数8.括号匹配9.电话号码的字母组合10.盛水最多的容器1.千分位思路:将参数转化为字符串,每次循环裁剪字符串的后三位加入返回值中主要用到的方法:String.slice(start,end); 裁剪字符串,...
2019-05-27 16:18:19
361
原创 jQuery选择器
1.基本选择器$('#id')$('.class')$("p") //选取所有p元素$("*")$("div,span,p.myClass") //div和span和拥有class属性为myClass的p标签2.层次选择器$("div span") // div里的所有span$("div > span") ...
2018-04-16 21:58:52
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人