8.1k words 7 mins.

# Set 在 ES6 之前,我们存储数据的结构主要有两种:数组、对象。 在 ES6 中新增了另外两种数据结构:Set、Map,以及它们的另外形式 WeakSet、WeakMap。 Set 是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是元素不能重复。 创建 Set 我们需要通过 Set 构造函数(暂时没有字面量创建的方式): // 1. 生成 Set 结构const set = new Set()set.add(1)set.add(2)set.add(3)set.add(3)set.add('4')console.log(set) // Set(4)...
4.9k words 4 mins.

# 模板字符串 const date = new Date()console.log(`现在是北京时间: ${date.getFullYear()} 年 ${date.getMonth() + 1} 月 ${date.getDate()} 日`);function getFullYear(){ return date.getFullYear()}function getMonth(){ return date.getMonth() +...
4.8k words 4 mins.

# 字面量增强写法 ES6 中对 对象字面量 进行了增强,称之为 Enhanced object literals(增强对象字面量)。 字面量的增强主要包括下面几部分: 属性的简写:Property Shorthand 方法的简写:Method Shorthand 计算属性名:Computed Property Names const friends = ['樱岛麻衣', '小鸟游六花']const Lain = { // 1.property shorthand (属性的简写) friends, // 2.method shorthand...
4.4k words 4 mins.

# class 定义方式 我们会发现,按照前面的构造函数形式创建 类,不仅仅和编写普通的函数过于相似,而且代码并不容易理解。 在 ES6(ECMAScript2015)新的标准中使用了 class 关键字来直接定义类; 但是类本质上依然是前面所讲的构造函数、原型链的语法糖而已; 所以学好了前面的构造函数、原型链更有利于我们理解类的概念和继承关系; 那么,如何使用 class 来定义一个类呢? 可以使用两种方式来声明类:类声明和类表达式; // 类的声明class Person {}// 类的表达式// const Animal = class...
12k words 11 mins.

# 面向对象的特性 – 继承 面向对象有三大特性:封装、继承、多态 封装:我们前面将属性和方法封装到一个类中,可以称之为封装的过程; 继承:继承是面向对象中非常重要的,不仅仅可以减少重复代码的数量,也是多态前提(纯面向对象中); 多态:不同的对象在执行时表现出不同的形态; 那么这里我们核心讲继承。 那么继承是做什么呢? 继承可以帮助我们将重复的代码和逻辑抽取到父类中,子类只需要直接继承过来使用即可。 那么 JavaScript 当中如何实现继承呢? 不着急,我们先来看一下 JavaScript 原型链的机制; 再利用原型链的机制实现一下继承; # JavaScript...
6.2k words 6 mins.

# 创建对象方案 # 字面量 const lain = { age: 16}# 工厂模式:工厂函数 function createMaster(name, age) { return { name, age, sleeping() { console.log(`${this.name} 在睡觉`); } }}const Saber = createMaster("Saber", 16)const...
4.1k words 4 mins.

# 数据属性描述符 数据数据描述符有如下四个特性: [[Configurable]]:表示属性是否可以通过 delete 删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性描述符; 当我们直接在一个对象上定义某个属性时,这个属性的 [[Configurable]] 为 true; 当我们通过属性描述符定义一个属性时,这个属性的 [[Configurable]] 默认为 false; [[Enumerable]]:表示属性是否可以通过 for-in 或者 Object.keys () 返回该属性; 当我们直接在一个对象上定义某个属性时,这个属性的...
4k words 4 mins.

# JavaScript 柯里化 柯里化也是属于函数式编程里面一个非常重要的概念。 我们先来看一下维基百科的解释: 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化; 是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数,而且返回结果的新函数的技术; 柯里化声称 “如果你固定某些参数,你将得到接受余下参数的一个函数”; 维基百科的解释非常的抽象,coderwhy 老师对此的总结: 只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数; 这个过程就称之为柯里化; #...
2.2k words 2 mins.

# 1. 实现 call Function.prototype._call = function (thisArg, ...args) { // 1. 将 thisArg 转成对象类型 (防止传入的是非对象类型) thisArg = (thisArg !== null && thisArg !== undefined) ? Object(thisArg) : window // 2. 定义唯一 key const symbolFn = Symbol(+new Date) // 3. 获取需要执行的函数...
13k words 11 mins.

# name 是 window 自带的全局属性 # name 属性可设置或返回存放窗口的名称的一个字符串 它比较特殊。当你打开浏览器没有给 name 赋值时 console.log (window.name === '') 是为 true 的! console.log(window.name === ''); // trueconsole.log(window);参考: # var 声明 name var 第一次打印 var name = 'nekoaimer'// 当你第一次赋值时 name...