自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 js基础之-手写代码

9.手写Object.create。10.手写instanceof。11.手写promise。

2025-12-30 17:25:44 160

原创 js基础之-如何理解js中一切皆对象的说法

***如何判断关键点是: prototype 属性只存在于可能作为构造函数的函数上。如果函数不能/不应该使用 new 调用(如箭头函数),就没有 prototype 属性1.在js中只有函数,特别是构造函数会自动获得prototype属性,比如2.不会自动生成的 prototype的情况**

2025-12-26 16:19:06 330

原创 设计模式之-状态模式

但在状态模式正好相反,状态模式是把事物的每种状态都封装成单独的类,跟此种状态有关的行为都被封装在这个类的内部,所以button按钮被按下的时候,只需要在上下文中,把这个请求委托给当前的状态对象即可,该状态对象会负责渲染他自身的行为。这句话第一部分的意思是将状态封装成独立的类,并将请求委托给当前对象,当对象的内部状态改变时,会带来不同的行为变化。第二部分是从客户的角度来啦吗,我们使用的对象,在不同的状态下具有截然不同的行为,这个对象看起来是从不同的类中实例化而来的,实际上这是使用了委托的效果。

2025-12-25 14:11:46 281

原创 设计模式之-中介者模式

中介者模式的作用就是接触对象与对象之间的紧耦合关系。增加一个中介者对象后,所有相关对象都通过中介者对象来通信,而不是相互引用,所以当一个对象发生改变时,只需要通知中介者对象即可。中介者使各对象之间耦合松散,而且可以独立地改变他们之间的交互。中介者模式使网状的多对多关系变成了相对简单的一对多的关系。在上面这段代码中,每个玩家都有两个属性,this.partners和this.enemies,用来保存其他玩家对象的引用,当每个对象的状态发生改变,比如角色移动、吃到道具或者死亡,都必须显式地遍历通知其他对象。

2025-12-24 15:24:26 673

原创 高阶函数-手写bind

【代码】高阶函数-手写bind。

2025-12-23 17:58:07 90

原创 设计模式之-职责链模式

1.场景:有一个售卖手机的电商网站,公司针对缴纳500元定金和200元定金的用户有优惠政策,支付500会收到100元优惠券,支付200元收到50元优惠券,而没有支付定金的用户只能进入普通购买模式,没有优惠券,且在库存有限的情况下不一定保证能买到。orderType表示订单类型,pay表示是否已经支付定金,未支付只能降级进入普通购买模式,stock表示普通购买的手机库存数量。非原创,来源javascript设计模式与开发实践 -曾探。5.用AOP实现职责链。

2025-12-23 17:03:49 172

原创 设计模式之-享元模式

剥离了外部状态的对象成为共享对象,外部状态在必要时被传入共享对象来组装成一个完整的对象,虽然组装外部状态成为一个完整对象的过程需要花费一定事件,但却可以大大减少系统中的对象数量,相比之下,这点时间或许是微不足道的。在上面的例子中,性别是内部状态,内衣是外部状态,通过区分这两种状态,大大减少了系统中的对象数量,通常来讲,内部状态有多少种组合,系统中便最多存在多少个对象,因为性别通常只有男女,所以该内衣厂商最多只需要2个对象。下面来改写下这个代码。可以看到,改进之后的代码,只需要两个对象便完成了同样的功能。

2025-12-23 14:56:24 935

原创 设计模式之-模板模式

我们在父类中容易变化的地方放置钩子,钩子可以有一个默认的实现,究竟要不要“挂钩”,这由子类自行决定。在上面的例子中,到底谁才是所谓的模版方法呢,答案是Beverage类中的init方法,该方法封装了子类算法框架,他作为一个算法模版,指导子类以何种顺序去执行那些方法,在init方法中算法内的每一个步骤都清楚地展示在我们面前。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有的执行顺序,子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。来看一个咖啡与茶的例子。

2025-12-23 09:46:36 192

原创 设计模式之-组合模式

其中,macroCommand被称为组合对象,closeDoorCommand,openDoorCommand,openQQCommand都是叶对象。在macroCommand的execute的方法里,并不执行真正的操作,而是遍历它所包含的叶对象,把真正的execute请求委托给这些叶对象。通过这段代码,很容易发现宏命令中包含一组字命令,他们组成了一个树形结构,这是一颗结构非常简单的树。// 家里的电视和音响是连接在一起的,所以可以用一个宏命令来组合打开电视和打开音响的命令。扫描文件夹的demo。

2025-12-22 18:03:37 711

原创 设计模式之-命令模式

1 .命令模式的用途2.应用场景3.demo1-菜单程序4.命令模式的作用不仅仅是封装运算快,还可以很方便地给命令对象增加撤销操作哦,之前策略模式有写过一个Animal类,这个类是让页面上的div移动到水平方向的某个位置,下面来修改一下这个demo现在页面中有一个input文本框和一个button按钮,文本框可以输入一些数字,表示小球移动后的水平位置,小球在用户点击按钮后立即开始移动,代码如下:现在我们想要加一个撤销按钮,以便小球可以会回到初始状态,我们先把目前代码改成用命令模式实现增加撤销按钮现

2025-12-22 15:50:14 940

原创 设计模式之-策略模式

一个基于策略模式的程序至少由两部分组成,第一部分是一组策略类,策略类封装了具体的算法,并负责具体计算过程,第二个部分是环境类Context,Context接受客户的请求,随后把请求委托给某一个策略类,说明Context中要维护对某个策略对象的引用。策略模式定义了一系列的算法,并且会将每一个算法封装起来,让它们可以相互的替换。这是一种很常见的做法,提交函数比较庞大,缺少弹性,违反开放-封闭原则。下面用策略模式来重构表单校验。'密码长度不能少于6位''手机号码格式不正确'再来看一个表单的例子。

2025-12-19 18:59:27 398

原创 设计模式之-装饰器模式

现在我们看到在showLogin函数里,即要负责打开登陆浮层,又要负责数据上报,这是两个层面的功能,在此处却被耦合在一个函数,使用AOP分离之后代码如下。许多客户端希望通过不同的方式来收到通知,例如通过发送短信、微信、QQ,那么此时我们就会去扩展 Notifier 这个类,创建一些子类。像这种场景下,最佳的解决方案是使用组合而非继承,这也是前面在介绍设计原则的时候,其中就提到了组合优于继承。这是一种结构型设计模式,允许你将对象(A)放入包含行为的特殊对象里面,从而为原来的对象(A)绑定新的行为。

2025-12-19 16:36:44 335

原创 设计模式之-工厂模式

假设有产品 A,B,C,那么在标准的工厂方法模式里面,就有对应的工厂 A,B,C,假设现在需要新增一个产品 D,我们只需要新增一个对应的工厂 D 即可,原来的工厂是不受任何影响的。在抽象工厂模式中,会有一个产品族的概念,一个产品族(一个系列)会对应一组产品,之后一个工厂在生产的时候,是生产这一组产品,而非单个的某个产品。每增加一个产品,就需要增加一个工厂,当我们的产品的数量很多的时候,就会使得工厂的数量也成倍的增加。3.2产品:通过调用工厂给客户端提供的接口,所得到的对象。5.先写一个简单的工厂模式吧。

2025-12-19 14:25:44 354

原创 设计模式之-单例模式

4.虽然现在完成了一个透明的单例类的编写,但是他同样又一些缺点,在这段代码中,CreateDiv的构造器实际上负责了两件事情。6.通过引入代理类的方式,我们同样完成了一个单例模式的编写,跟之前不同的是,现在我们把负责管理单例的逻辑转移到了代理类ProxySingletonCreateDiv中,这样一来,CreateDiv就变成了一个普通的类,他跟ProxySingletonCreateDiv组合起来就可以达到单例类的效果,这个例子也是缓存代理的应用之一。5.用代理实现单例模式。

2025-12-18 17:20:46 365

原创 设计模式之-代理模式

1.代理实现懒加载1代理实现懒加载2,class的写法代理引发的思考:也许有人会有疑惑,不过是实现一个小小的图片懒加载,即使不引用任何模式也能办到,那么引入代理模式的好处究竟在哪里呢?

2025-12-18 16:05:25 1015

原创 设计模式之-发布订阅者模式

那么我们需要解藕,那么怎么做呢,那就是加中间层,我们先把他叫事件中心,一个模块发生了一件事,我不知道干嘛,比如发生了401了,你不知道干嘛也不要自作主张,这个事发生了,就抛出事件,让其别的模块监听事件,别的模块监听到事件就该干嘛干嘛,该是路由做的事情,就由路由去做,该是界面做的事就由界面去做,这样就解藕了,然后我们定义一个公共模块,即事件中心。将来有一天路由要处理的话,那就导入事件中心,自己去处理自己该干的事,比如跳转路由,界面也是一样的,各自模块各自处理自己的事情。它们只需要知道相关的消息或事件类型。

2025-12-17 18:27:52 459

原创 设计模式之-观察者模式

3.2MutationObserver,这是一个WebApi,它允许开发者监听DOM树的变化,包括元素的添加,删除,属性变化之类的,监听到变化之后,可以做出一些响应的行为。// 注册事件实际上就可以看作是发布者对观察者进行登记,或者说添加观察者的行为。// 后期当用户真实的触发点击事件的时候,对应类型的所有的事件处理器都会被触发。// 该方法接收两个参数,第一个是要观察的DOM元素,第二个是一个配置对象。// 相当于就是发布者通知所有的观察者,观察者进行自身的一些行为。

2025-12-16 17:08:49 577

原创 Object.defineProperty和Proxy实现拦截的区别

2.使用proxy,可以定义空对象,里面不写属性值,他不会报栈溢出的原因也是因为没有递归调用,根本原因是因为拦截器返回的不是它本身,而是obj的属性值。1.Object.definedProperty的实现拦截必须得声明一个额外的变量,例如下面这样。6.但是,这种写法,也是必须的在obj中写上所有的key,才可以拦截到,如果你不写的话就拦截不到。7.如果使用proxy的话,就可以不用定义key,写一个空的对象就可以。但是如果你这么写,就会报错,栈溢出,因为递归调用了。3.如果你这么写,同样会报栈溢出。

2025-12-15 18:00:31 236

原创 grid布局之-子项放置4

* 统一控制子项格子横向的排列方式 */非原创,来自渡一袁老师,简单记录下。/* 控制子项的排列 */这个可以用做表格布局。

2025-12-12 09:15:16 305

原创 grid布局-子项放置3

【代码】grid布局-子项放置3。

2025-12-12 08:54:40 271

原创 grid布局之-子项放置2

* 控制子项放置顺序,默认是按照行 *//* 控制隐式网格的宽度 */

2025-12-11 18:00:04 331

原创 grid布局之-子项放置1

* 第1个数字是行的起始线,第2个数字是列的起始线,第3个数字是行跨越几个格子,第4个数字是列跨越几个格子, *//* 第1个数字是行的起始线,第2个数字是列的起始线,第3个数字是行的终止线,第4个数字是列的终止线, */第二种的写法比较灵活,假如后面想把aside的列放到右边,只需要改这块。/* 速写属性 grid-row和grid-column *//* 该写法表示跨越两个格子 */grid-template速写属性。/* 在父容器中定义 *//* 速写属性 */

2025-12-11 17:41:42 1039

原创 高阶函数的思考-知识可以很简单

非原创,内容来自渡一袁老师,简单记录下吧。2.函数的本质就是流程的封装。

2025-12-11 15:52:11 200

原创 高阶函数之-数据分组的思考

那么这个函数在功能上是没有什么问题了,但是在使用上还不那么舒服,我们希望他支持两种方式来传递,第一种按照属性名来分组,第二种按照函数来,那么这个参数就出现了两种情况,那么就需要用到参数归一化了。但有一天可能按照性别分组,你不得不重新写一下代码,改成下面这样。此时,我们应该想到应该写一个通用的分组函数来完成分组操作。非原创,来自渡一袁老师,简单记录,每日分享。看一个例子,刚开始,你可能会这样写。

2025-12-11 09:23:24 332

原创 高阶函数的应用-分时函数的封装

第三个问题,考虑浏览器的兼容问题,如果没有requestIdleCallback这个函数的话,怎么整呢,那么需要考虑两个点,就是1.如何分割执行块,2.还有执行时间吗?这里其实就差不多了,为了更加灵活,如果说不传递chunkSplitor这个函数的话,默认就调用requestIdleCallback这个函数。至此,功能已经实现,但是还可以优化一下,目的是为了使该函数更加的通用,然后代码就改造成如下。场景是,页面有一个按钮,点击按钮会创建100万个div,然后会造成页面卡顿。接下来继续思考这个函数。

2025-12-09 15:34:13 169

原创 高阶函数的应用-并发队列

【代码】高阶函数的应用-并发队列。

2025-12-05 09:07:02 130

原创 高阶函数的应用-防抖

【代码】高阶函数的应用-防抖。

2025-12-05 08:46:49 124

原创 grid应用之响应式布局

非原创,内容来源渡一袁老师,简单记录下。

2025-12-04 18:02:56 239

原创 gird布局之九宫格布局

非原创,内容来源渡一袁老师,简单记录下吧。

2025-12-04 18:01:05 308

原创 高阶函数的应用-封装动画函数

1.1就是把函数作为参数传递,1.2.把函数作为返回值。

2025-12-04 09:19:20 170

原创 联合类型转交叉类型

因为函数参数这一块有逆变。2.先看一个小demo。非原创,来源渡一袁老师。5.但如果是函数的话。

2025-12-01 08:55:47 180

原创 不可变类型

1.Readonly只能对对象的控制是浅克隆。非原创,来源渡一袁老师ts课程讲解。

2025-11-28 10:24:25 126

原创 前置的不定量参数

1.有点粗糙,仅仅是不报错。

2025-11-28 10:23:53 213

原创 ts中的协变与逆变(类型安全)

3.下面这个就是逆变,说的就是在函数中这种小类型给大类型的情况。非原创,来源于渡一袁老师ts课程,简单记录下。2.这样小类型赋值给大类型是安全的,就可以。1.这样大类型赋值给小类型是不安全的,4.如果换成下面这样就可以了。

2025-11-27 10:41:23 214

原创 对防抖函数做类型标注

3.由于防抖函数dhandler没有返回类型,我们需要把这个返回类型给干掉,由于传递的函数有返回类型,他也就有了返回类型了,所以需要去掉防抖函数的返回类型,接下来你可能会这样写。非原创,来源渡一袁老师ts讲解,简单记录下。2.然后使用范型,写成这样。1.一开始你可能会这么写。

2025-11-27 09:18:55 159

原创 ts中的递归类型推断

3.第3步,确定返回值类型,此时又分为3种情况,一种是函数没有传参数,那么就是返回该函数的返回值,第二种情况是只传递一个参数,那么也是返回该函数的返回值,第三种情况是如果传递多个参数,返回一个新的函数,1.给柯里化函数添加类型标注。刚开始你可能会这样写。

2025-11-24 13:31:59 282

原创 使用infer封装通用类型工具

2.自己写一个ReturnType函数函数,引出infer。非原创,来源于渡一袁老师课程,简单记录下。1.ReturnType函数。

2025-11-21 12:28:36 207

原创 ts从字段到函数推导

3.,如果后期又加了sex属性,那就应该动态获取字段,而不应该是使用模版字符串写死。内容来自渡一袁老师的课程,非原创,记录下。5.但是,还有一种情况就是。6.需要处理一下这块。

2025-11-20 15:32:02 312

原创 ts基础之交叉类型,缺省,挑选,部分

4.部分Partial,会把所有属性变为可选。内容来自渡一袁老师讲解的课程。5.综合以上demo。

2025-11-20 14:34:33 166

原创 element的table 表格 expand-change事件遇到的bug,记录下

下面图片中框住的部分很重要,这个就是造成第一次点击展开,其实已经发送请求,但子table并未展开,需要再点一次才能出来,这块,我猜想是因为最外层的表格数据是响应式数据,传递的参数row也是响应式的,因此改了row.isExpand,造成了页面刷新,所以第一次点击没有展开,第二次才展开,图中圈中的部分,把row的响应式数据变成非响应式数据就可以了,点击展开立即就可以展开子table。首先获取table表格数据时,添加了一项,用来表示行的展开与折叠。

2023-11-21 18:30:17 2338 1

element的table 表格 expand-change事件遇到的bug,记录下

element的table 表格 expand-change事件遇到的bug,记录下

2023-11-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除