前端基础知识(持续更新js)

本文深入讲解JavaScript中的原型链、作用域链、DOM事件流、数组方法及继承等核心概念,帮助读者理解JS运行机制。

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
(待完成)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值