原型和原型链

JS引用类型四个规则都会有一个对象特性,可以自由扩展对象都会有一给隐式原型**proto**,该属性值是一给普通对象隐式原型**proto属性会指向他构造函数的显示原型prototype**值当你试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么它会去它的隐式原型 proto(也就是它


实现防抖和节流

防抖使用场景:当一个点击事件多次发送请求的时候用户可能会多次点击造成不必要的内存释放,这个时候我们就可以使用防抖来节省内存消耗。例子:比如我们在淘宝界面搜索MacBook当我输入m时,为了更好的用户体验,通常会出现对应的联想内容,这些联想内容通常是保存在服务器的,所以需要一次网络请求,当继续输入ma


await-async

asyncasync是一个异步函数的关键字,该函数内有个特殊之处就是可以在它内部使用await关键字,而普通函数中是不可以。await关键字有什么特点呢?通常使用await是后面会跟上一个表达式,这个表达式会返回一个Promise那么await会等到Promise的状态变成fulfilled状态,之


生成器和迭代器

迭代器的介绍迭代器是帮助我们对某个数据结构进行遍历的对象。迭代器协议定义了产生一系列值(无论是有限还是无限个)的标准方式。在js中这个标准就是一个特定的next方法。next方法有如下的要求:一个无参数或者一个参数的函数,返回一个应当拥有以下两个属性的对象:done:该值为ture和fasle,有值


Proxy和Reflect

Proxy基本使用ES6当中新增了一个Proxy类,他可以帮助我们创建一个代理对象白话说就是当我们想要监听一个对象操作的时候,可以先创建一个代理对象(Proxy对象);之后对这个对象进行操作的时候都是通过这个代理对象来进行,代理对象可以监听我们想要对原对象进行哪些操作。const p = new P


原型继承关系--对象和函数

function Foo(){}上面这个函数中他是怎么创建的呢?他是通过 Foo= new Function() 创建的,其实他也是一个对象(这里比较抽象),对又是一个对象也是一个函数,和我们平常认知不一样,但确实是这样的。所有他拥有__proto__和prototype两种原型对象Foo函数的时候


认识构造函数

啥是构造函数其实说是构造函数,其实和函数没有区别,但是如果被new操作符来调用时,该函数则是一个构造函数。那么这个new到底有什么特殊的呢?new操作符调用的作用当一个函数被new操作符调用时,它会发生以下的操作会在内存当中创造一个空的对象,个对象内部的[[prototype]]属性会被赋值为该构造


JS对象属性描述符

为什么有对象属性符当我们想对一些对象内的属性进行设置的时候,比如这个属性是否可以通过delete删除,是否可以遍历出来,想要对一个属性进行精准的操作控制的时候,这个时候我们就可以使用我的对象属性符。如何来表示对象属性符我们可以通过Object.defineProperty()该方法是可以直接在一个对


Call-apply-bind的实现

Call代码实现// 自己实现的调用Function.prototype.zyCall = function (thisArg, ...argArray) { var fn = this //这是指的是被调用的函数 foo() thisArg = Object(thisArg) //为了