javascript
马猴弟弟
这个作者很懒,什么都没留下…
展开
-
vue数据双项绑定缺陷(2.x)
vue数据双项绑定缺陷(2.x)使用Object.defineProperty()中get()、set()方法进行数据劫持data中变量为数组、对象时候,操作变量可能不会触发视图更新数组1.使用数组方法进行操作(push、pop、shift、unshift、splice、sort、reverse)会触发视图更新2.直接操作数组:使用索引为数组添加项 this.arr[2] = ‘abc’,[arr[1], arr.[2]] = [arr.[2],arr[1]], delete arr[1],改变数原创 2021-08-09 17:24:57 · 237 阅读 · 0 评论 -
JS二叉树输出全路径+二叉树全路径求和
二叉树输出全路径+二叉树全路径求和二叉树输出全路径function FullPathSum(tree){ if(!tree) return 0; let res = []; const dfs = (node, sum)=> { if(!node.left && !node.right) res.push(sum); if(node.left) dfs(node.left, node.left.val + sum); if(node.right) dfs(node原创 2021-08-07 15:17:47 · 349 阅读 · 0 评论 -
JS函数节流和防抖
JS函数节流和防抖节流: 动作绑定事件,动作发生后一段时间后触发事件,在这段时间内,如果动作又发生,则无视该动作,直到事件执行完后,才能重新触发。function throtte(func, time) { let activeTime = 0; return () => { const current = Date.now(); if (current - activeTime > time) { func.apply(this, ar原创 2021-08-06 16:04:46 · 52 阅读 · 0 评论 -
JS深拷贝
JS深拷贝(考虑循环调用)function deepClone(obj, hash = new Map()){ if(obj === null || typeof obj !== 'object') return obj; if(hash.has(obj)) return hash.get(obj); let res = Array.isArray(obj)?[]:{}; hash.set(obj, res); for(let key in obj){ if(obj.hasOwnProper原创 2021-08-06 11:29:26 · 60 阅读 · 0 评论 -
JS Instanceof 实现
手写Instanceoffunction myInstanceof(left, right){ let leftProto = left.__proto__; let rightProto = right.prototype; while(true){ if(leftProto === null) return false; if(leftProto === rightProto) return true; leftProto = leftProto.__proto__; }}验原创 2021-08-06 11:22:19 · 84 阅读 · 0 评论 -
JS Object.create()实现
JS Object.create()实现Object.myCreate = function(obj){ function F(){} F.prototype = obj; return new F();}原创 2021-08-06 11:16:31 · 84 阅读 · 0 评论 -
JS手写柯里化
手写柯里化//支持多参数传递function curry(fn, ...args){ let len = fn.length; args = args || []; let _this = this; return function(){ let newArgs = [...args, ...arguments]; if(newArgs.length < len){ return curry.call(_this, fn, ...newArgs); }else{ r原创 2021-08-06 10:59:19 · 85 阅读 · 0 评论 -
JS手写call、appl、bind及实现原理
手写call、appl、bind及实现原理callFunction.prototype.myCall = function(context){ context = context || window; let args = [...arguments].slice(1); let fn = Symbol('fn'); context[fn] = this; let res = context[fn](...args); Reflect.deleteProperty(context, fn);原创 2021-08-06 11:12:34 · 59 阅读 · 0 评论