03 2017 档案
摘要:1、修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时。这意味着,修饰器能在编译阶段运行代码。 2、 上面代码中,@testable就是一个修饰器。它修改了MyTestableClass这个类的行为,为它加上了静态属性isTestable。 3、修饰器不仅可以修饰类,还可以修饰类的属性。 上
阅读全文
摘要:1、await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中。 2、多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。 3、await命令只能用在async函数之中,如果用在普通函数,就会报错。 上面代
阅读全文
摘要:1、async函数返回一个 Promise 对象。 async函数内部return语句返回的值,会成为then方法回调函数的参数。 2、async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。 3、只有async函数内部的异
阅读全文
摘要:1、async 函数是 Generator 函数的语法糖。前文有一个 Generator 函数,依次读取两个文件。 写成async函数,就是下面这样。 async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。 2、async函数对 Gene
阅读全文
摘要:1、在关系数据库中,我们可以定义一些操作来通知已知的关系创建新的关系。9中操作:插入、删除、更新、选择、投影、连接、并、交、差。 2、SQL,结构化查询语言,用于关系数据库上的标准化语言。 3、插入是一元操作,在表中插入新的元组。 4、删除是一元操作,根据要求删除表中的元组。 5、更新也是一元操作,
阅读全文
摘要:1、数据库通常的定义:数据库是一个组织内被应用程序使用的逻辑相一致的相关数据的集合。 2、与平面文件(单独没有关联的文件)相比,数据库具有以下优点: 3、数据库管理系统,DBMS,是定义、创建、维护数据库的一种工具。 4、数据库管理系统由5部分构成:硬件、软件、数据、用户和规程。 5、数据库管理系统
阅读全文
摘要:内容来自曾探,《JavaScript设计模式与开发实践》,P49 函数柯里化(function currying)又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包里被保存起来。待到函数真正需要
阅读全文
摘要:1、那些需要使用函数表达式的场合,尽量用箭头函数代替。因为这样更简洁,而且绑定了this。 2、所有配置项都应该集中在一个对象,放在最后一个参数,布尔值不可以直接作为参数。 3、不要在函数体内使用arguments变量,使用rest运算符(...)代替。因为rest运算符显式表明你想要获取参数,而且
阅读全文
摘要:1、ES6提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。 2、var命令存在变量提升效用,let命令没有这个问题。建议不再使用var命令,而是使用let命令取代。 3、在let和const之间,建议优先使用const,尤其是
阅读全文
摘要:1、<script>标签打开defer或async属性,脚本就会异步加载。渲染引擎遇到这一行命令,就会开始下载外部脚本,但不会等它下载和执行,而是直接执行后面的命令。 defer与async的区别是:前者要等到整个页面正常渲染结束,才会执行;后者一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再
阅读全文
摘要:1、如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法。 2、如果要使用的常量非常多,可以建一个专门的constants目录,将各种常量写在不同的文件里面,保存在该目录下。 然后,将这些文件输出的常量,合并在index.js里面。 使用的时候,直接加载index
阅读全文
摘要:1、如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。 2、import命令具有提升效果,会提升到整个模块的头部,首先执行。这种行为的本质是,import命令是编译阶段执行的,在代码运行之前。 3、由于import是静态执行,所以不能使用表达式和变量,这些只有在
阅读全文
摘要:1、在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。 2、ES6 可以
阅读全文
摘要:1、类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。 2、父类的静态方法,可以被子类继承。静态方法也是可以从super对象上调用的。 3、静态属性指的是Class本身的属性,即
阅读全文
摘要:1、原生构造函数会忽略apply方法传入的this,也就是说,原生构造函数的this无法绑定,导致拿不到内部属性。比如,Array构造函数有一个内部属性[[DefineOwnProperty]],用来定义新属性时,更新length属性,这个内部属性无法在子类获取,导致子类的length属性行为不正常
阅读全文
摘要:1、Object.getPrototypeOf方法可以用来从子类上获取父类。因此,可以使用这个方法判断,一个类是否继承了另一个类。 2、super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。 第一种情况,super作为函数调用时,代表父类的构造函数。ES6
阅读全文
摘要:1、Class之间可以通过extends关键字实现继承。 上面代码中,constructor方法和toString方法之中,都出现了super关键字,它在这里表示父类的构造函数,用来新建父类的this对象。 子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类
阅读全文
摘要:1、与函数一样,类也可以使用表达式的形式定义。 这个类的名字是MyClass而不是Me,Me只在Class的内部代码可用,指代当前类。 如果类的内部没用到的话,可以省略Me,也就是可以写成下面的形式。 2、采用Class表达式,可以写出立即执行的Class。 3、私有方法是常见需求,但 ES6 不提
阅读全文
摘要:1、ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。 2、 上面代码定义了一个“类”,可以看到里面有一个constructor方法,这就是构造方法,而this关键字则代表实例对象。也就是说,ES5的构造函数Point,对应ES6的P
阅读全文
摘要:1、ES6 诞生以前,异步编程的方法,大概有下面四种。 回调函数 事件监听 发布/订阅 Promise 对象 Generator 函数将 JavaScript 异步编程带入了一个全新的阶段。 2、所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执
阅读全文
摘要:1、异步操作的同步化表达 Generator函数的暂停执行的效果,意味着可以把异步操作写在yield语句里面,等到调用next方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放在yield语句下面,反正要等到调用next方法时再执行。所以,Generator函数的一个重
阅读全文
摘要:1、Generator 函数是 ES6 提供的一种异步编程解决方案。形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield语句,定义不同的内部状态。 2、Generator函数的调用方法与普通函数一样,也是在
阅读全文
摘要:1、一个数据结构只要部署了Symbol.iterator属性,就被视为具有iterator接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。 2、for...of循环可以使用的范围包括数组、Set 和 Map 结构
阅读全文
摘要:1、遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 2、Iterator的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次
阅读全文
摘要:1、Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。 2、Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误
阅读全文
摘要:1、Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。 2、所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。 3、对象的状态不受外界
阅读全文
摘要:1、Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。 修改某些Object方法的返回结果,让其变
阅读全文