首页
宇行信
取消

JavaScript基础之发布-订阅模式EventEmitter的实现

我们知道EventEmitter是在Node.js中events模块封装的,但是在浏览器端还没有,在Vue中非父子组件通信,官方推荐过一种EventBus的解决方案,它是将EventBus作为组件传递数据的桥梁,所有组件共用的相同事件中心,可以向该中心发送事件或者接收事件,所有组件都可以收到通知,使用起来非常便利,其核心便是发布-订阅模式的实现。 接下来实现一个简易版的发布-订阅模式Eve...

JavaScript基础之异步编程演进

在说异步之前,先介绍一下同步的概念,即在执行某段代码时,在该段代码没有返回结果之前,其他代码暂时无法执行,但是一旦拿到返回值后,就可以接着执行其他代码了,换句话说,在此段代码执行完未返回结果前,会阻塞之后的代码的执行,这样的情况就成为同步。 再回过头来说异步,就是当某一代码执行异步过程调用发出后,这段代码不会立刻得到返回结果。而是在异步调用发出之后,一般通过回调函数处理这个调用之后拿到结果...

JavaScript基础之数组常用操作实现

数组的去重 给定一个数组,如果对其中的元素去重? 1. 利用Set 我们知道ES6引入了Set,它的一个特性就是不能有重复的元素存在,我们可以利用这一特性来实现。另外Set是一个可迭代的对象,我们可以利用Array.from或者展开运算符将其转换为一个新的数组 const result = Array.from(new Set(arr)) const result = [...ne...

JavaScript基础之数组与类数组梳理

JavaScript中数组的API纷繁复杂,其中还有不少坑,这里一起做个总结。 构造器 通常我们使用对象字面量的方式创建一个数组,例如var array = [];,但是,有的时候对象字面量不能满足我们要求,比如,我想给数组限制长度,用对象字面量就无法创建了,这时候只能使用构造器: new Array(arg1,arg2,…),参数长度为0或者长度大于等于2时,传入的参数将按照顺...

JavaScript基础之闭包原理

闭包是JavaScript中重要的概念,并且与作用域紧密相关,这里做个总结。在闭包之前,我们先对作用域做下基本介绍。 作用域 JavaScript 的作用域通俗来讲,就是指变量能够被访问到的范围,在 JavaScript 中作用域也分为好几种,ES5 之前只有全局作用域和函数作用域两种。ES6 出现之后,又新增了块级作用域。接下来我们一一介绍。 全局作用域 在编程语言中,变量通常被分...

JavaScript基础之new、apply、call、bind实现原理

在 javascript 中,new通常被用来创建一个对象,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。而bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 new关键词原理 new 关键词的主要作用就是执行一个构造函数、返回一个实例对象,在 new 的过程中,根...

JavaScript基础之继承实现

继承可以使得子类具有父类的方法和属性,同时也可以重新定义父类的某些属性,并重写或者覆盖某些属性和方法。使得子类具有与父类不同的属性和方法。 接下来我们就来一起看看实现继承的几种方式 1. 原型链继承 原型链继承是比较常见的继承方式之一,其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。其中涉及的构造函数、原型和实例,三者之间存在着一定的关系,即每一个构造函数都有一个原型...

JavaScript基础之原型与原型链的理解

理解原型与原型链对于我们实现继承、new关键字原理、甚至代码优化等非常重要,接下来我们对这块做一个总结。 概念 我们都知道,访问一个对象实例上的属性和方法时,首先在实例本身查找。 如果没有找到,会到实例对象的隐式属性__proto__上查找,就是该实例的构造函数的原型对象。如果还没有,会继续访问原型对象的原型,直到Object.prototype.__proto__(null)为止。这也...

JavaScript基础之对象深浅拷贝原理以及实现

我们知道JavaScript数据类型分为基本数据类型和引用数据类型,对于基本数据类型,变量存储的是基本类型的值,而对于引用数据类型, 变量存储的是其在内存中的地址,而通常拷贝一个对象,又分为浅拷贝和深拷贝两种,下面我们分别来讨论这种拷贝的区别。 浅拷贝 复制一个对象,如果对象属性是基本数据类型,复制的就是基本类型的值给新对象,但如果是引用数据类型,复制的就是内存中的地址,如果其中一个对象...

JavaScript基础之数据类型及检测和转换

数据类型 JavaScript数据类型一共分为8种: Number(数值,包含NaN) String(字符串) Boolean(布尔值) Undefined(未定义/未初始化) Null(空对象) Symbol(独一无二的值,ES6 新增) BigInt (大整数,能够表示超过 Number 类型大小限制的整数,ES 2020新增) Object(对象。...