学习计划
注:
- 早(7:00-11:00)
- 午(13:30-16:00)
- 晚(19:00-23:00)
第一周
| 日期 | 早 | 午 | 晚 | 复习内容 | 完成度 |
|---|---|---|---|---|---|
| 6月1日 | 作用域 | 作用域过程 | 闭包 | 作用域过程 | 100% |
| 6月2日 | 立即执行函数 | 对象,构造函数 | 实例化原理,包装类 | 包装类及面试题 | 90% |
| 6月3日 | 原型 | 原型链 | call/apply,插件化开发 | 原型,原型链 | 100% |
| 6月4日 | 继承 | 圣杯模式,模块化写法 | 枚举,深浅拷贝 | this, call/apply,原型链,笔试题 | 100% |
| 6月5日 | 深拷贝实例 | 数组基础 | 数组方法 | 数组排序,类数组 | 100% |
| 6月6日 | 复习 | 复习 | 复习 | 复习 | 100% |
知识整理:
AO/GO预编译解决JS一系列关于作用域或作用链相关所产生的一切问题
对象有它的属性
函数也有它的属性
函数也是一种对象类型,也是一种引用类型,引用值
作用域的隐式属性是
[[scope]]域作用域:
[[scope]],存储作用域链的容器作用域链:
Scope Chain负责存储的是AO(函数执执行期上下文)/GO(全局执行期上下文)每个函数的作用域链里都包含GO(内可访外,外不能)
变量是从作用域链里顶端向下查找
外层函数执行内层函数被定义
内层函数没有执行之前与外层函数执行时的作用域链是相同的
当内部函数被返回到外部并保存时,一定会产生闭包,闭包会产生原来的作用链不释放
立即执行函数:自动执行,执行完成以后立即销毁
()里加上任何东西都为表达式报错:函数声明写法加执行符号
正常运行但不执行函数:函数声明写法加执行符号且传入参数
逗号运算符返回逗号后面的数据
表达式会自动忽略函数名称
循环点击案例
对象创,执,增,删,改,查
this代表对象本身构造函数:没执行之前,this不存在
构造函数:实例化之后,this执行指向实例对象
构造函数:当
return引用值的时候可以修改return结果,原始值则不能原始值并没有自己的方法和属性
成为实例化对象后的数字对象,且可以设置属性和方法
经过包装参与的对象运算后又变为原始值
undefined和null是不可以设置任何的属性和方法原型
prototye是function对象的一个属性,但打印结果也是对象。原型
prototype是定义构造函数构造出每个对象的公共祖先,所有被该构造函数构造出的对象都可以继承原型上的属性和方法构造函数自身有的属性不会往祖先身上找
实例化出来的对象 对原型
prototype的增删改查constructor:在prototype里面,指向构造函数本身__proto__是实例化以后的结果,是每个实例化对象的原型prototype的容器原型
prototype是属于实例化对象而不属于构造函数实例化之前的
prototype和实例化的prototype是有区别的实例对象的
__proto__指向构造函数的原型,所有的对象都有自己的原型(包括原型本身)原型链:沿着
__proto__去找原型里的属性一层一层的继承原型的属性的这条链原型的顶端是
Object.prototype(面试问题)原型链上的增删改只能是它自己本身增删改(后代不能)
Object.create(对象/null)是创建对象用的方法Object.create()提供了一个自定义原型的功能,把其他对象作为自己的原型存在不是所有的对象都继承于
Object.prototype(面试题)undefined和null不能经过包装类,还没有原型包装类都有自己系统内置的
toString()方法call/apply:改变
this的指向call(对象, 参数1, 参数2, ...)apply(对象, []) //arguments插件开发:函数表达式变量接收立即执行函数的闭包
插件开发:利用全局变量保存立即执行函数的闭包
枚举:
hasOwnProperty()只遍历自定义属性和方法枚举:
in判断属性是否存在于对象里,不排除原型枚举:
instanceof()判断对象是否是构造函数实例化出来的,实例化对象为false,在原型链上有重合的都为true3种判断数组的方法:
contructor,instanceof,Object.prototype.toStringcallee返回的是正在被执行的函数对象callee在哪个函数内部指向哪个函数caller返回调用所在的函数本身(严格模式报错)浅拷贝:只遍历第一层结构的属性
深拷贝:利用递归进行内层结构的属性
数组继承数组的原型
Array prototype且里面所有的方法都可以继承和使用实际上数组在JavaScript底层机制,就是继承对象而来,数组就是对象的另一种形式
数组可以截取,中间元素可以为空,可以写入和更改
类数组:具有
length属性,数组形式下标对应的值,包括arguments和document标签列表类数组:利用
Array.prototype.slice.call(arguments));方法可以转为数组
重难点:
- 闭包:当内部函数被返回到外部并保存时,一定会产生闭包,闭包会产生原来的作用链不释放,过渡的闭包会产生内存泄漏,或加载过慢
实例化原理:构造实例化对象相当于普通函数执行
- 函数执行生成AO, 默认存了
this对象 - 当new的时候,走完构造函数内部的代码
- 隐式的在构造函数内部底下加入
return this; this指向被赋值的变量并存入GO
- 函数执行生成AO, 默认存了
系统内置的构造函数包装方法:
new Number()new String()new Boolean()
- 包装类的过程:
new String(str).length = 1 => 无法保存 => delete 修改原数组:
push()最后一位加,返回值都为执行了方法以后数组长度unshift()在第一位前面加,返回值都为执行了方法以后数组长度pop()返回值剪切掉最后一位shift()返回值剪切掉第一位reverse()返回值为翻转数组元素后的数组splice()返回值为修改后的数组,可以删除数组某一项,或多项,可以指定位置增加某一项sort()返回排序以后的数组,按照ASCII码来排序,传入函数参数可以自定义排序条件
新建数组上的修改:
concat()返回值为整合拼接的新数组toString()返回值为类似数组结构的字符串列表,可以去掉数组的中括号数组元素变为单独的字符串slice()返回修改后的新数组,可以克隆数组,从下标元素(包括)开始截取到最后(参数1),截取的结束下标数组之前(不包括)(参数2),负值时下标元素(包括)开始截取到结束下标元素之前(不包括),还可以将类数组转为数组join()返回值为新的字符串列表,不传参返回跟toString()一样的字符串列表,默认逗号隔开,传参可以指定符号隔开split()返回值为修改后的新数组,不传参可以把字符串转为数组,参数1传入跟分隔字符一样的符号会逗号分隔数组元素,参数1传入空格会分隔所有数组元素包含分隔符号,参数2传入数字会截断下标数组元素之前(不包括)
第二周
| 日期 | 早 | 午 | 晚 | 复习内容 | 完成度 |
|---|---|---|---|---|---|
| 6月7日 | 错误信息 | try..catch.. |
垃圾回收原理 | 垃圾回收原理 | 100% |
| 6月8日 | Arguments对象 |
copyWithin() |
entries() |
try..catch.. |
90% |
| 6月9日 | fill() |
find() |
findIndex() |
Arguments对象 |
100% |
| 6月10日 | generator和iterator |
flat()&flatMap() |
Array.from()&Object.is() |
内置对象 | 100% |
| 6月11日 | includes() |
sort() |
复习ECMA | 复习ECMA | 50% |
| 6月12日 | 复习ECMA | 复习ECMA | 复习ECMA | 复习ECMA | 55% |
| 6月13日 | 复习ECMA | 复习ECMA | 复习ECMA | 复习ECMA | 70% |
知识整理:
try..catch..:手动抛出错误方法来避免程序遇到错误终止执行- 垃圾回收原理:找出不再使用的变量,释放其占用内存,固定的时间间隔运行
Arguments对象:函数内部对应参数值的实参列表,也是一个对象,内置的局部变量,本质是类数组对象。- 越到ES6,
arguments越来越弱化 - 形参实参的对应关系
Array.prototype.copyWithin():浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。Array.prototype.entries():返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。Array.prototype.fill():该方法实际上根据下标范围内的元素覆盖填充新的值Array.prototype.find():返回第一个满足条件的数组元素Array.prototype.findIndex():返回第一个满足条件的数组元素的索引值generator和iterator:希望遍历的过程是可以控制的(遍历的过程可停止,也可继续),手动的控制遍历流程,这种方式就叫做迭代的过程。Array.prototype.flat():数组扁平化多维数组转一维Array.prototype.flatMap():首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。Array.from():从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。Object.is():判断两个值是否为同一个值Array.prototype.includes():用来判断一个数组是否包含一个指定的值Array.prototype.sort():对数组的元素进行排序,并返回数组
重难点:
SyntaxError语法错误- 变量名不规范
- 关键字赋值
- 基本的语法错误
ReferenceError引用错误- 变量或者函数未被声明
- 给无法被赋值的对象赋值
RangeError范围错误TypeError类型错误URIError URI错误EvalErroreval函数执行错误
人为抛出的错误
类数组
Array-like- 具有
length属性 - 具有从零开始的属性下标
- 没有数组的内置方法
- 非箭头函数的其他函数的内置的局部变量
- 具有
7种数组遍历的方法:
forEach()普通的数组遍历方法 formap()映射 -> 每一次遍历,返回一个数组元素 -> 返回一个新的数组filter()过滤 -> 每一次遍历返回布尔值来决定当前元素是否纳入新的数组中reduce()归纳 -> 每一次遍历将当前元素收归到容器中reduceRight()-> reduce的反向操作every()-> 判定是否所有元素都符合条件some()-> 是否有某一个或多个符合一个条件
生成器和迭代器:
- 生成器是一个函数
- 迭代器是由生成器函数执行后返回的一个带有next方法的对象
- 生成器对迭代的控制是由yield关键字来执行的
第三周
| 日期 | 早 | 午 | 晚 | 复习内容 | 完成度 |
|---|---|---|---|---|---|
| 6月13日 | 复习ECMA | 复习ECMA | 复习ECMA | 复习ECMA | 80% |
| 6月14日 | 复习ECMA | 复习ECMA | 复习ECMA | 复习ECMA | 90% |
| 6月15日 | 复习ECMA | 复习ECMA | 复习ECMA | 复习ECMA | 100% |
| 6月16日 | 复习数组方法 | 复习数组方法 | 复习数组方法 | 复习数组方法 | 80% |
| 6月17日 | 复习数组方法 | 复习数组方法 | 考试 | 复习数组方法 | 100% |
| 6月18日 | 专题学习this | 专题学习this | 专题学习this | 考试内容复习 | 90% |
| 6月19日 | forEach使用和重写 | filter使用和重写 | map使用和重写 | 复习重写的数组方法 | 100% |
| 6月20日 | every重写 | some重写 | reduce重写 | 复习重写的数组方法 | 100% |
重难点:
预编译: 函数执行 -> AO -> 产生this -> this的指向与执行方式有关
- 默认绑定规则
隐式绑定规则: 对象调用(谁调用指向谁)
- 隐式丢失
- 参数赋值
- 显示绑定: call/apply/bind
- new绑定
优先级问题:
new > 显示 > 隐式 > 默认
第四周
| 日期 | 早 | 午 | 晚 | 复习内容 | 完成度 |
|---|---|---|---|---|---|
| 6月21日 | 数组扁平 | 数组排序 | 数组去重 | this指向 | 80% |
| 6月22日 | DOM初探 | JS对象,XML | document对象 | 对象继承 | 90% |
| 6月23日 | 节点 | DOM树 | 节点增删改 | document对象 | 100% |
| 6月24日 | 文档碎片 | 滚动尺寸 | 可视尺寸 | 节点 | 80% |
| 6月25日 | todolist实战 | todolist实战 | todo实战 | 尺寸 | 100% |
| 6月26日 | todolist实战 | todolist实战 | todolist实战 | 滚动条 | 90% |
| 6月27日 | 复习 | 复习 | 复习 | 复习 | 100% |
知识整理
获取元素对象方法
getElement和querySelector及区别节点不是元素,节点包含元素
- 元素节点(相当于DOM元素):节点号 1
- 属性节点:节点号 2
- 文本节点(text): 节点号 3
- 注释节点(comment): 节点号 8
- document节点: 节点号 9
- document fragment节点: 节点号11
节点名称
nodeName只读节点的值
nodeValue可以更改节点属性
attributes&getAttributeNode可读写节点创建
createElement()节点增加
appendChild()指定位置插入节点
insertBefore()- 还可以剪切节点
- 追加节点
节点删除
removeChild()&remove()节点文本
innerHTML&innerText节点替换
replaceChild()文档碎片
createDocumentFragment()获取样式元素
currentStyle&getComputedStyle()事件、事件处理函数绑定:
onclickaddEventListenne('click', fn, false)attachEvent('onclick', fn)
事件解除绑定
removeEventListener()datachEvent()onclick = null/false
事件冒泡:子级元素向父级元素进行事件冒泡现象
事件捕获:顶层元素开始捕获,直至事件源结束
事件源对象:如鼠标、键盘对象
取消冒泡:
e.stopPropagation()e.cancelBubble = true
取消默认事件:
e.preventDefault()e.returnValue = false
事件流:从页面中接收事件的顺序 冒泡/捕获、
事件代理:事件源对象
event.target,用于拿到元素下标
重难点
- 滚动尺寸,页面尺寸
