有道云笔记相关整理(一)

2021-08-30  本文已影响0人  蓝蓝红同学

1.闭包与作用域

首先了解一个概念,在ES5之前,JS只存在全局作用域和函数作用域(ES6中let和const的使用让其增加了块级作用域,ps:块级作用域简而言之就是放在大括号中的内容),全局定义的变量在全局都可以被调用

关于闭包,简而言之,在父函数内部定义一个子函数来调用父函数的变量,并且通常将这个子函数作为返回值(这样才能让我们调用),通过这样的方式,使我们能够使一个函数访问另一个函数的变量。更多解释和例子详见:闭包详解

2.原型、原型链

首先,每个对象(“JS中万物皆对象”)都存在一个_proto_属性,而每一个函数对象都存在一个prototype属性,这个属性指向它的原型对象,原型对象主要存在两个方面的作用:①共享方法、属性,②继承(原型继承、组合继承等)

函数、原型、普通对象间的关系及原型链的形成

所有函数上存在prototype属性指向原型对象;实例对象中存在_proto_属性指向原型对象;所有原型对象上,有constructor属性指向构造函数,原型对象也是对象,所以也存在_proto_属性指向它的原型

这种原型_proto_不断指向下一级原型直到为null的形式便组成了原型链。

大致关系图如下:

图来源于网络

PS:构造函数上同样存在constructor指向“它的构造函数”,为Function()

BaseInfo为构造函数

3.Argument和Set

argument类数组,如其名,与数组类似,酷似obj(实际上数组和obj都是哈希表。。。);Set我们一般称其为集合,是es6引入的一种数据结构

很重要一点:argument类数组没有数组方法,所以我们一般会将其转换成数组再进行操作

Set集合没有重合元素(利用这一点可以实现数组去重),但是拥有自己的方法,3个遍历器(key、value、entries)分别对应(键、值、键值对)、1个遍历方法(与数组方法类似的foreach)

key都是从0开始,依次增加,但最后都有一个代表长度的key,argument为length,Set为size

关于类数组转数组思路方法:

①利用数组的slice方法,使用call指定类数组来调用

                Array.propotype.slice.call(argument)

②遍历赋值,创建新数组,遍历argument传入新数组

③数组方法Array.from(argument) ;  ps:es6新方法,该方法可传入可迭代对象(包括类数组和字符串)

4.setTimeout实现setInterval

①利用递归,在setTimeout()内部调用函数的时候,再调用自身,实现无限次的调用setTimeout

递归实现重复调用

5.类的继承

①六大继承方式:原型链继承、利用构造继承、组合继承、原型式继承、寄生继承、寄生组合继承

链接:JS类的创建与继承

6.defineProperty方法

该方法用于给对象添加属性,存在三个参数:对象名、key、配置参数(含有多个属性,包括value、能否枚举enumerable(默认否)、能否修改writable(默认否)、get(读取了对象属性式调用)、set(修改对象属性时调用)等属性)

实现数据代理:

数据代理

7.setTimeout和setInterval的运行机制

两个函数都是异步的,当执行到他们时,会先将执行语句移出本次执行,他们需要等待下一次的Event loop,也就是说,后面的同步任务执行完成后,才会执行这里的语句,并且,如果此时设置的时间还没有到,仍旧会将其移出该次执行,直到执行完本次的Event loop,进入下次循环

简单例子

笔记详情:前端整理

上一篇 下一篇

猜你喜欢

热点阅读