
es6
沐风系大佬
我偷电瓶养你,联系方式qq:1215323732
展开
-
使用Proxy+Reflect创建观察者模式
const queueObverses = new Set();const observe = fn => queueObverses.add(fn);const observable = obj => new Proxy(obj,{set});function set(target,key,value,receiver){ console.log("set",target,key,value) let result = Reflect.set(target,key,value,re原创 2020-12-07 14:15:40 · 122 阅读 · 0 评论 -
proxy拦截器
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。var obj = new Proxy({}, { get: function (target, propKey, receiver) { console.log(`getting ${propKey}!`); return Reflect.get(t原创 2020-12-04 17:13:02 · 370 阅读 · 0 评论 -
promise使用及解析及事件循环
转载:https://juejin.cn/post/6901658026794483725#commentfunction Promise (executor) { var self = this; self.status = 'pending'; self.value; self.reason; self.onResolvedCallbacks = []; // 存放所有成功的回调。 self.onRejectedCallbacks = []; // 存放原创 2020-12-04 10:20:12 · 1484 阅读 · 0 评论 -
Set Map
Set 结构的实例有以下属性。在 Set 内部,两个NaN是相等的。两个对象总是不相等的。Set.prototype.constructor:构造函数,默认就是Set函数。Set.prototype.size:返回Set实例的成员总数。Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。Set.prototype.add(value):添加某个值,返回 Set 结构本身。Set.prototype.delete(value):删除某个值,返原创 2020-12-01 13:38:22 · 192 阅读 · 0 评论 -
Symbol
SymbolReflect.ownKeys()Symbol.hasInstanceSymbol.isConcatSpreadableReflect.ownKeys()Reflect.ownKeys()方法可以返回所有类型的键名,包括常规键名和 Symbol 键名。let obj = { [Symbol('my_key')]: 1, enum: 2, nonEnum: 3};Reflect.ownKeys(obj)// ["enum", "nonEnum", Symbol(my_k原创 2020-11-20 17:31:23 · 300 阅读 · 1 评论 -
js中map函数
map的使用场景(上面的例子为了演示方便没有把map处理返回后的结果赋值给一个新数组,实际上要用map最好是要有新的数组来接收返回值,filter之类的函数同理,否则用forEach会更合适些,当然在使用forEach时需要注意forEach循环是无法使用return, break之类的语句跳出的,如果需要使用break跳出循环,可以使用原生的 for语句 或者ES6的 for-of ):原创 2020-11-19 10:06:42 · 4189 阅读 · 0 评论 -
对象克隆
如果想完整克隆一个对象,还拷贝对象原型的属性,可以采用下面的写法。// 写法一const clone1 = { __proto__: Object.getPrototypeOf(obj), ...obj};// 写法二const clone2 = Object.assign( Object.create(Object.getPrototypeOf(obj)), obj);// 写法三const clone3 = Object.create( Object.getPro原创 2020-11-12 09:28:37 · 125 阅读 · 0 评论 -
es6数组克隆与Array.from、includes;Object链判断运算符[/?./]
ES5 只能用变通方法来复制数组。const a1 = [1, 2];const a2 = a1.concat();a2[0] = 2;a1 // [1, 2]上面代码中,a1会返回原数组的克隆,再修改a2就不会对a1产生影响。扩展运算符提供了复制数组的简便写法。const a1 = [1, 2];// 写法一const a2 = [...a1];// 写法二const [...a2] = a1;上面的两种写法,a2都是a1的克隆。数组新增:Array.from;Array原创 2020-11-07 00:10:17 · 484 阅读 · 0 评论 -
尾调用优化
尾调用之所以与其他调用不同,就在于它的特殊的调用位置。我们知道,函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame),保存调用位置和内部变量等信息。如果在函数A的内部调用函数B,那么在A的调用帧上方,还会形成一个B的调用帧。等到B运行结束,将结果返回到A,B的调用帧才会消失。如果函数B内部还调用函数C,那就还有一个C的调用帧,以此类推。所有的调用帧,就形成一个“调用栈”(call stack)。尾调用由于是函数的最后一步操作,所以不需要保留外层函数的调用帧,因为调用位置、内部变量原创 2020-11-03 15:02:30 · 297 阅读 · 0 评论 -
字符串替换replace()
replaceAll()的第二个参数replacement除了为字符串,也可以是一个函数,该函数的返回值将替换掉第一个参数searchValue匹配的文本。'aabbcc'.replaceAll('b', () => '_')// 'aa__cc'上面例子中,replaceAll()的第二个参数是一个函数,该函数的返回值会替换掉所有b的匹配。...原创 2020-10-29 16:17:56 · 518 阅读 · 0 评论