2020就剩最后一个月了,是时候努力起来了!
-
原型链
原型链是js实现继承的主要方式,从数据结构来看其实就是一个链表,实例有一个指向原型的指针,原型又包含一个指向构造函数的指针,层层递进 -
作用域链
在查找变量时候,会从当前上下文的变量对象中查找,如果没有找到,就会从父级执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。 -
dom文档模型 冒泡捕获
冒泡:事件会从最内层的元素开始发生,发生顺序一直向上,直到document
p->div->body->html->document
捕获:从最外层的元素到最里层的元素
document->html->body->div->p
addEventLinsenter(event,function,useCapture)的三个参数:
第一个参数要挂载的事件,比如click
第二个参数是发生事件对应的函数,比如将div变色
第三个参数是一个布尔类型,当传值为false时,则处理事件按照事件冒泡顺序;若输入为true,则处理事件按照事件捕获顺序。默认为false
对于非点击的节点来讲,先执行捕获再执行冒泡;
对于被点击的节点来讲,则是按照顺序执行先注册的事件; -
深拷贝、浅拷贝
深拷贝:从内存堆中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响
浅拷贝:重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会互相影响
继承
每一个new出来的对象或者函数有一个constructor属性指向构造函数
var a = new Function()
a.constructor === Function // true
// es5 原型链方法 将父类实例当做子类构造函数的原型
function Father(){
this.flag = true
}
Father.prototype.getFlag = function(){
return this.flag
}
function Son(){
this.sonFlag = false
}
Son.prototype = new Father
Son.prototype.getSonFlag = function(){
return this.sonFlag
}
let obj = new Son()
//
function Person(name,age){
this.name = name;
this.age = age;
this.showName = function(){
console.log('我是' + name)
}
}
// this实现
function Child(){
Person.bind(this)('zs','18')
}
// call实现
function Child(){
Person.call(this,'zs','18')
}
// apply实现
function Child(){
Person.apply(this,['zs','18'])
}
var child = new Child()
child.showName()
// es6继承
class Person{
}
class Child extends Person {
}
eventLoop
执行栈中存放主线程,遇到异步操作把函数的回调放到任务队列中等待,主线程的执行栈全部执行完毕,主线程检测任务队列是否有任务要执行,有的话就把该任务放到执行栈中进行,没有就保持等待。
Array
- 创建数组
let arr = new Array()
let arr = []
Array.of(1,2,3)
-
检测数组
Array.isArray(value) -
转换方法
toString() toLocalString() -
栈方法
push()数组末尾添加元素(会改变原数组),返回修改后数组长度
pop()从数组末尾移除最后一项(会修改原数组),减少数组长度,返回删除的项 -
队列方法
shift() 移除数组中的第一项(会修改原数组),并返回该项
unshift() 在数组前端添加任意个元素(会修改原数组),并返回数组的长度 -
操作数组方法
reserse() 反转数组(会修改原数组),并返回排序后的数组
sort() 将按照升序排列数组,调用每个数组项的toString() 方法,然后比较得到的字符串,确定如何排序(会改变原数组)。也可以接受一个函数,返回排序后的数组
concat() 用于连接两个或多个数组。先创建当前数组的一个副本,然后将接受到的参数添加到这个副本的末尾,最后返回新构建的数组(不会改变原数组)
slice() 基于当前数组中的一个或多个项创建一个新数组,接收一或两个参数,返回一个由起始位置和结束位置决定的原数组的浅拷贝(原数组不会改变)
splice() 通过删除或者替换现有元素或者添加新的元素来修改数组,并以数组形式返回被修改的内容。(此方法会改变原数组)
fill() 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
flat() 按照一个可指定的深度递归遍历数组,并将所有元素和遍历子数组中的元素合并成一个新数组返回 -
查位置方法
find() 返回数组中满足提供的测试函数的第一个元素的值
includes() 判断一个数组是否包含一个指定的值,如果包含则返回true -
迭代方法
every() 测试一个数组内的所有元素是否都能通过某个指定函数的测试,返回的是一个布尔值
some() 测试数组中是不是至少有一个元素通过了被提供的函数测试,返回的是一个布尔值
filter() 创建一个新数组,包含通过所提供函数实现的测试的所有元素。
forEach() 对数组的每个元素执行一次给定的函数
map() 创建一个新数组,其结果是该数组中的每一个元素是调用一次提供的函数后的返回值
Promise
(待完成)
本文深入讲解JavaScript中的原型链、作用域链、DOM事件流、数组方法及继承等核心概念,帮助读者理解JS运行机制。
9842

被折叠的 条评论
为什么被折叠?



