- 博客(44)
- 收藏
- 关注
原创 Vue2中为啥不用 Object.defineProperty 实现响应式数组 ? 不能监听到数组变化吗?
所以,在Vue 3.0 中,尤大把响应式数据部分弃用了 Object.defineProperty,而使用 Proxy 来代替它。难道 Object.defineProperty 真的要背这锅么,下面就来分析一下 Object.defineProperty 真的无法监测数组下标的变化吗?但是有一个问题,就是对于数组的一些常用方法如push/pop等,无法触发监听;可以监听数组的元素的增加和修改,但不能监听数组长度的变化和数组方法的调用。本身是可以监控到数组下标的变化的,只是在 Vue 的实现中,从。
2024-06-26 11:00:45
373
1
原创 国际化项目词条处理方案-拒绝重复性的搜索+复制+粘贴,不然手腕得麻了
【代码】国际化项目词条处理方案-拒绝重复性的搜索+复制+粘贴,不然手腕得麻了。
2024-05-21 10:44:13
289
原创 实现Object.create、实现Object.freeze
Object.seal() 静态方法密封一个对象。密封一个对象会阻止其扩展并且使得现有属性不可配置。密封对象有一组固定的属性:不能添加新属性、不能删除现有属性或更改其可枚举性和可配置性、不能重新分配其原型。只要现有属性的值是可写的,它们仍然可以更改。seal() 返回传入的同一对象。Object.freeze冻结一个对象,让其不能再添加/删除属性,也不能修改该对象已有属性的可枚举性、可配置可写性,也不能修改已有属性的值和它的原型属性,最后返回一个和传入参数相同的对象;
2024-03-14 13:59:21
322
原创 js手写实现 Promise.all
实现 Promise.all 如果参数中有一个promise失败,那么Promise.all返回的promise对象失败。在任何情况下,Promise.all 返回的;传入参数为一个空的可迭代对象,则直接进行resolve。promise 的完成状态的结果都是一个数组;
2024-03-11 18:52:35
365
原创 js手写Promise.prototype.finally
实现 Promise.finally前面的promise不管成功还是失败,都会走到finally中,并且finally之后,还可以继续then(说明它还是一个then方法是关键),并且会将初始的promise值原封不动的传递给后面的then.如果finally函数中有promise等异步任务,会等它们全部执行完毕,再结合之前的成功与否状态,返回值;finally里的函数,无论如何都会执行,并会把前面的值原封不动传递给下一个then方法中;
2024-03-08 18:12:37
524
原创 JS手写Promise.resolve()
实现Promise.resolve() 传参为一个 thenable 对象,返回的 Promise会跟随这个对象,采用它的最终状态作为自己的状态。其他情况,直接返回以该值为成功状态的promise对象。传参为一个 Promise, 则直接返回它。
2024-03-07 14:12:46
500
原创 js手写寄生组合式继承 【面试简版】
寄生组合式继承 类的继承在几年前是重点内容,有n种继承方式各有优劣,es6普及后越来越不重要,那么多种写法有点『回字有四样写法』的意思,如果还想深入理解的去看红宝书即可,我们目前只实现一种最理想的继承方式。
2024-03-07 11:39:32
329
原创 js手写深拷贝 包括【简单版】 和 【完整版】
js深拷贝 会抛弃对象的constructor,所有的构造函数会指向Object。他无法实现对函数 、RegExp等特殊对象的克隆。对象有循环引用,会报错;解决拷贝循环引用问题。解决拷贝对应原型问题。
2024-03-07 10:19:48
578
原创 js手写实现jsonp
JSONP的实现原理是:客户端通过动态创建 script 标签,将需要跨域请求的 URL 作为 script 标签的 src 属性值,并在 URL 中携带一个回调函数的名称(一般为 callback 或 cb),服务端收到请求后,根据参数进行处理,并将处理结果作为一个参数传递给客户端指定的回调函数,最后返回给客户端的内容为回调函数的调用,并将处理结果作为参数传递进去,这样客户端就可以获取到跨域请求的数据了。跨域指的是在一个域名下的网页去请求另一个域名下的资源。2.处理url中的回调函数。
2024-03-04 10:13:55
376
原创 js手写实现call、apply、bind
手写实现call apply bind改变了 this 指向,让新的对象可以执行该函数。那么思路是否可以变成给新的对象添加一个函数,然后在执行完以后删除?
2024-03-01 16:54:31
368
原创 js函数柯里化
在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。:用闭包把参数保存起来,当参数的数量足够执行函数了,就开始执行函数。
2024-02-29 11:17:05
330
原创 js手写防抖 包括立即执行 和 不立即执行两种
防抖(debounce):不管事件触发频率多高,一定在事件触发n秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,就以新的事件的时间为准,n秒后才执行,总之,触发完事件 n 秒内不再触发事件,n秒后再执行。
2024-02-27 09:44:00
458
原创 js实现单例模式
创建对象和管理单例的职责被分布在两个不同的方法中,这两个方法组合起来才具有单例模式的威力。在合适的时候才创建对像,并且只创建唯一的一个。
2024-02-25 21:24:03
377
原创 实现LRU缓存算法
LRU 英文全称是 Least Recently Used,英译过来就是”最近最少使用“的意思。LRU 是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
2024-02-24 14:14:06
331
原创 获取视频时长,loadedmetadata 未监听到
遇到一个特例问题,一般的都能监听到拿到视频文件信息获取视频时长,就测试突然提的说新建有问题,初次排查是视频时长没获取到,还以为哪里没不对一直没有走进。
2023-11-16 17:52:17
729
原创 数据结构-数组和链表的区别
双向链表的节点定义同时包含指向后继节点(下一个节点)和前驱节点(上一个节点)的引用(指针)。相较于单向链表,双向链表更具灵活性,可以朝两个方向遍历链表,但相应地也需要占用更多的内存空间。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。**环形链表:**如果我们令单向链表的尾节点指向头节点(即首尾相接),则得到一个环形链表。缓存局部性: 当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速度。
2023-11-16 10:24:37
58
原创 js类型转换---挺多了--亲测正确
类型转换—挺多了–亲测正确<script> console.log(null == undefined); //true console.log(null === undefined); //false var a = 42; var b = a + ''; //隐式强制类型转换 var c = Str...
2020-04-13 17:16:35
120
原创 闭包的理解
闭包理解闭包的作用延长变量的作用范围和生命周期通过闭包使得外部函数能够访问内部函数的变量,本来外部不可以访问内部,内部可以访问外部–作用域链查找变量<script> var name = "The Window"; var object = { name: "My Object", ge...
2020-04-13 13:09:50
108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人